|
문장 1: % 부호 % 와일드카드 접두사는 SQL 쿼리를 인덱스를 중단시키고 대신 전체 테이블 스캔을 하게 만듭니다. 이 말은 인기가 많습니다 결론은 틀렸습니다 사실 이 문장은 매우 정확하지 않습니다. 와일드카드 % 접두사는 SQL 검색을 매우 효율적으로 만들어주지만, 대부분의 경우 여전히 인덱스로 갑니다(전체 텍스트 인덱스는 필요 없고 일반 인덱스만 만듭니다). [DBO]에 비클러스터 인덱스 [Ix_index 이름]을 생성하세요. [wkf_ 테이블 이름]
( [db_title] ASC
) 지금 처형하세요 [도서관 이름]에서 상위 10위를 선택하세요 [db_id], [db_Summary], [db_AddDate], [db_title] [dbo]. [wkf_database] 여기서 [db_title]와 비슷한 '%dba%' 순서는 1 설명
쿼리 플랜이 명확하게 표시되어 있습니다
비교를 색인하기 전에:
예외적으로, 복잡한 쿼리 쿼리 옵티마이저는 전체 테이블 스캔을 위해 인덱스를 포기할 수 있습니다. 이것은 LIKE '%keyword%'뿐만 아니라 쿼리 복잡도와도 관련이 있습니다
문장 2: 와일드카드 접두사의 비율이 높으면 SQL 쿼리가 인덱스가 없지 않고 인덱스가 됩니다
이 주장은 매우 일방적이며, 인덱스의 99%가 인덱싱하지 않는 것보다 IO를 줄이고 효율을 개선하지만, 인덱스를 찾은 후 키 매칭 액션은 부분적으로 성능을 소모합니다. 위 두 그림에서 보듯, 키워드가 쉽게 매칭될 경우 전체 테이블 스캔이 데이터를 빠르게 찾고, 인덱스 스캔은 키 매칭 작업에 소요되는 시간을 충분히 절약하지 못합니다(대부분의 온라인 쿼리는 이 문제가 없습니다). 치료: 1. 신경 쓰지 않는다면 추가 성능 소비는 그리 크지 않습니다. 그리고 키워드마다 소비량이 다르지만, 일부 키워드는 이런 문제를 가지고 있어 무시할 수도 있습니다 2. 조건이 허락한다면 오버라이드 인덱스(INCLUDE 인덱스라고도 함)를 구축하는 것이 더 나은 방법입니다. 전제: a. 저장 공간이 충분하고, b가 DML 연산에 큰 영향을 미치지 않으며, c가 덮어쓴 인덱스에 큰 필드가 없다 [DBO]에 비클러스터 인덱스 [Ix_index 이름]을 생성하세요. [wkf_ 테이블 이름]
( [db_title] ASC
) 포함 ( [ [ db_id],[db_Summary],[db_AddDate]) 현재 실행 쿼리 계획은 다음과 같아 훨씬 신선합니다
위 내용은 지금 SQLSERVER 처리에 대해 생각나는 것들입니다: 테이블명에서 *를 선택하세요. 예를 들어 '%Keyword %'
|