2009-10-30 6 views
3

PostgreSQL에서 SQL Server 데이터베이스를 다시 만들려고합니다. 이 색인을 다시 만드는 방법을 찾을 수 없다는 것을 제외하고는 모두 괜찮습니다.PostgreSQL 아날로그 SQL 서버 인덱스

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 구조 스타 +는

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 

는 어쩌면 그것은 최적의 기압이 아닌 경우에만 하나의 쿼리가
을 EAV입니다. 그리고 나는 그것에 또한 종사하고있다. 어떤 힌트를 환영이

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 

= 같은 아마 뭔가)

답변

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

PostgreSQL은 클러스터 또는 커버 인덱스를 지원하지 않습니다.

업데이트 :이 쿼리

, 당신은 참으로 제안 된 인덱스를 생성해야합니다 :

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 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에 연결되지 않은 경우는 별도의 테이블에 DataMessageGpsDetails을 유지하는 지점이있을 수 있습니다, 또는 GPS 정보 기록은 여러 데이터 메시지를 공유 할 수 있습니다 (이 gps_details_id 자주 NULL로 설정되어있다) .

GPS 정보를 데이터 메시지 테이블로 옮기는 것이 좋습니다.

+0

감사합니다. PG의 indexin HUGE 테이블에 대한 지침이 있습니까? –

+1

색인은 'DML'성능을 방해하고 sargable 쿼리의 속도를 높입니다. 당신의 테이블 구조와 쿼리를 보지 않으면 알기가 어렵습니다. – Quassnoi

+0

음, 항상 http://www.postgresql.org/docs/8.4/static/indexes-multicolumn.html이 있습니다. – Kev

1

PostgreSQL의 베타 버전에 색인 전용 검색 지원이 추가되었습니다. 즉, 쿼리에 요청 된 열이 인덱스에 포함되어 있으면 기본 데이터로 이동할 필요가 없습니다. 인덱스 전용 검색은 자동으로 수행됩니다.

색인 포함 검색이 포함 된 열을 사용하는 주된 이유입니다. Postgres (베타 또는 기타)가 포함 된 열을 지원하지 않는다고 생각하므로 원하는 열을 색인 할 열 목록 끝에 추가해야합니다.

+1

마지막 VACUUM 이후 페이지가 수정 된 경우 9.2에 추가 된 인덱스 만 스캔 할 필요가 있다는 점은 주목할 가치가 있습니다. –