PostgreSQL模拟SQL Server索引(包括列)

试图在Postgresql上重新创建我的sql Server数据库.一切都很好,除了我找不到如何重新创建这个索引:
USE [mytablename]  
GO  
CREATE NONCLUSTERED INDEX [myindex]  
ON [dbo].[mytablename] ([col1],[col2])  
INCLUDE ([col3],[col4])  
GO

将非常感谢您的帮助.

阿列克谢

更新:

http://img38.imageshack.us/img38/1071/89013974.png这里是db structure star eav
只有一个查询

SELECT this_.id as id0_0_,this_.device_id as device2_0_0_,this_.time_id as time3_0_0_,this_.gps_detail_id as gps4_0_0_   
FROM [scoutserver_data].[dbo].[DataMessage]  this_   
WHERE this_.time_id = 65536 and this_.device_id = 32768

也许它不是最佳的atm.我正在研究它.也许是这样的

SELECT * FROM [scoutserver_data].[dbo].[TimeDimension]   
  INNER JOIN ([scoutserver_data].[dbo].[DeviceDimension]   
  INNER JOIN  [scoutserver_data].[dbo].[DataMessage]   
ON [DeviceDimension].[device_id] =[DataMessage].[device_id])  
ON [TimeDimension].[time_id] = [DataMessage].[time_id]  
WHERE DeviceDimension.serial_id='2' AND TimeDimension.Day=15 AND TimeDimension.Year=2009

任何提示欢迎=)

CREATE INDEX myindex ON mytablename (co1l,col2,col3,col4)

Postgresql不支持聚簇或覆盖索引.

更新:

对于此查询,您需要确实创建建议的索引:

SELECT  this_.id as id0_0_,this_.gps_detail_id as gps4_0_0_   
FROM    DataMessage this_   
WHERE   this_.time_id = 65536
        AND this_.device_id = 32768

CREATE INDEX ix_datamessage_time_device_id_detail ON datamessage (time_id,device_id,id,gps_detail_id)

但是,你的表似乎对我来说过度标准化了.

您可以将年,月和日保存在表中的单个INT字段中.这将为您节省一次加入.

如果GpsDetails很少链接到DataMessage(这是gps_details_id通常设置为NULL),或者可以在多个数据消息之间共享GPS详细信息记录,则可能需要将DataMessage和GpsDetails保存在单独的表中.

事实并非如此,将GPS细节移动到数据消息表中会更好.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...