2008-12-16 5 views
0

클러스터되지 않은 인덱스를 사용하여 작성된 주소 필드에서 클러스터되지 않은 인덱싱 계획을 사용할 쿼리를 작성하려고합니다. 내가 가지고있는 문제는 내가 거리 주소를 검색 할 때 'like'eval 함수를 사용할 가능성이 높다는 것입니다. 이 함수를 사용하면 인덱스를 사용하는 대신 테이블 스캔이 발생한다고 생각합니다. 나는이 경우에 어떻게 글을 쓸 것인가? address3 필드에 클러스터되지 않은 인덱스를 두는 것은 무의미한가요? 미리 감사드립니다.필드에있는 클러스터되지 않은 인덱싱을 사용하는 문자열 검색 쿼리는 어떻게 작성합니까?

답변

0

이론적으로 데이터베이스는 인덱스가 가장 좋은 인덱스를 사용합니다. 어떤 데이터베이스 서버를 사용하고 있습니까? 실제로 무엇을 성취하려고합니까? 그리고 당신의 LIKE 성명은 어떻게 될 것입니까? 예를 들어, 와일드 카드 문자가 사용되는 쿼리 계획과 다를 수 있습니다.

달성하려는 목표에 따라 데이터를 사전 처리하고 검색에 유용한 다른 열이나 인덱싱 된 뷰를 사용하는 다른 가능성이 있습니다.

Here's SQL Server 2005 및 varchar 필드에서 인덱스 사용에 대한 일부 설명.

1

LIKE식이 문자열 시작 검색 (Address LIKE 'Blah%')을 수행하는 경우 색인 검색을 통해 색인을 사용할 것으로 예상됩니다.

Address LIKE '%Blah%'을 검색하면 쿼리에서 반환하는 필드 수와 인덱스의 선택도에 따라 테이블 스캔/인덱스 스캔이 발생합니다.

1

varchar 필드는 왼쪽에서 오른쪽으로 색인되어 있으며, 사전이나 백과 사전과 마찬가지로 색인이 생성됩니다.

필드가 시작된 항목을 알고 있다면 (예 : LIKE 'streetname %') 색인이 효율적입니다. 그러나 필드의 일부 (예 : LIKE '% something %%') 만 알면 색인을 사용할 수 없습니다.

1

LIKE를 사용하면 반드시 테이블 스캔을 사용할 필요는 없습니다. 검색하는 문자열에 따라 색인을 사용할 수 있습니다. (예를 들어 LIKE 'something %'는 일반적으로 인덱스를 사용할 수 있지만 LIKE '% something'은 그렇지 않을 수 있습니다. 서버가 적어도이 경우 인덱스 스캔을 수행 할 수는 있지만 더 비쌉니다. 스트레이트 인덱스 룩업이지만 전체 테이블 스캔보다 여전히 저렴합니다.) 좋은 기사 here은 SQL Server와 관련하여 LIKE와 인덱스에 대해 이야기합니다 (다른 DBMS가 분명히 다르게 구현할 것입니다).

관련 문제