이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 12044|회답: 0

[통신] sqlserver가 '%keyword%'와 같은 것을 처리할 때 인덱스 활용 문제

[링크 복사]
게시됨 2014. 11. 26. 오후 3:52:19 | | | |

문장 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 %'






이전의:SQLServer 트랜잭션 복제는 재초기화 없이 새로운 테이블을 추가합니다
다음:실용 SQL 문장: 날짜 추정
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com