2013-09-03 4 views
0

SQL 데이터베이스에서 다각형 데이터를 가져 오기 위해 쿼리를 작성했습니다.Sql 서버 기하학 열을 실행하는 데 시간이 오래 걸림

결과를 가져 오기 위해 다음과 같은 쿼리가 있습니다.

SELECT ZIP, 
     NAME, 
     STABB, 
     AREA, 
     TYPE, 
     orgZc.OrganizationId, 
     orgZc.[ZipCode] AS ORGzip, 
     REPLACE(REPLACE(REPLACE(REPLACE(GEOM.STAsText(),'POLYGON ((',' '),'MULTIPOLYGON (((',' '),'))',''),')))','')AS WKT 
FROM USZIP 
INNER JOIN ORGANIZTION_ZIP_CODES orgZc ON orgZc.[ZipCode]=USZIP.zip 
WHERE [email protected]_ID 

이 테이블에 이미

CREATE SPATIAL INDEX SIndx_SpatialTable_geometry_col1 
ON USZIP(GEOM) WITH (BOUNDING_BOX = (-90, -180, 90, 180)); 

아래와 같이 공간 인덱스를 추가하지만은 2,483 레코드를 가져 38 초 걸렸다. 누구든지이 쿼리를 최적화하는 데 도움을 줄 수 있습니까?

+0

인덱스는 WHERE 절에있는 검색 조건부가 이점을 얻을 수있을 때 도움이됩니다. 그러나 WHERE 절은 기하 구조 열을 전혀 참조하지 않는 것으로 보입니다. 왜 인덱스가 도움이 될 것이라고 생각 했습니까? –

+0

올바른 Damien_The_Unbeliever입니다. 하지만 나는 기하 도형 값을 기반으로 가져올 필요가 –

+0

Zip 열은 기본 열이므로 이미 인덱스가 있습니다. 조직에 속한 우편 번호에 대한 지오메트리 값을 가져오고 있습니다. –

답변

0

내 생각 엔 쿼리의 중요한 부분은 fromwhere 절입니다. 그러나 다음 줄을 제거하여이를 테스트 할 수 있습니다.

REPLACE(REPLACE(REPLACE(REPLACE(GEOM.STAsText(),'POLYGON ((',' '),'MULTIPOLYGON (((',' '),'))',''),')))','')AS WKT 

해당 처리에 많은 시간이 소요되는지 확인하십시오. 쿼리의이 부분에 대한

는 :

FROM USZIP INNER JOIN 
    ORGANIZATION_ZIP_CODES orgZc 
    ON orgZc.[ZipCode] = USZIP.zip 
WHERE orgZc.OrganizationId = @ORGANIZATION_ID; 

당신은 우편 번호가 "기본 열"이라고 말한다. 그러나 조인에 사용하려면 복합 인덱스 (또는 기본 키)에 첫 번째 열이어야합니다. 따라서 조인이 작동하려면 USZIP(zip)에 대한 인덱스가 실제로 필요합니다. (나는 이것이 테이블 이름을 기반으로하는 것으로 추측하고 있지만 명시 적으로 표현하고 싶습니다.)

두 번째로, where 절은 하나만 OriganizationId, 한 가지로 제한됩니다. 그렇다면 ORGANIZATION_ZIP_CODES(OrganizationId)에 대한 색인이 필요합니다. 또는 더 나은 방법은 ORGANIZATION_ZIP_CODES(OrganizationId, ZipCode)입니다.

+0

내가 말한대로 줄을 제거했습니다. 단지 몇 초 밖에 걸리지 않았습니다. 나는 한 번에 하나의 조직으로 일한다 –

+0

@ ChandraMohan. . . 파머. 이는 조인 최적화가 도움이되지 않는다는 것을 의미합니다. –

0

해결책을 찾았습니다. 새 열을 추가하고 업데이트 된 REPLACE (REPLACE (REPLACE (GEOM.STAsText(), 'POLYGON ((', ''), MULTIPOLYGON ((',' ')') ',' ' , ')))', '') AS WKT 이제 조작을 수행하지 않고 새로 추가 된 열에서 직접 가져올 수 있습니다. 이제 2483 레코드를 가져 오는 데 3 초가 걸렸습니다.