답변:
select 문에서 인덱스를 사용하는 방법은 무엇입니까?
이 방법:
SELECT * FROM table1 USE INDEX (col1_index,col2_index)
WHERE col1=1 AND col2=2 AND col3=3;
SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;
SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX (i2) USE INDEX (i2);
명시 적으로 지정해야합니까?
일반적 으로 인덱스를 사용하는 데 드는 비용이 추가로 북마크 조회를 수행해야하는 비용이 전체 테이블을 스캔하는 비용보다 낮을 경우 인덱스가 사용됩니다.
쿼리가 다음 형식 인 경우 :
SELECT Name from Table where Name = 'Boris'
그리고 1000 개 중 1 개 행은 Boris라는 이름을 가지고 있으며 거의 확실히 사용됩니다. 모든 사람의 이름이 Boris 인 경우 인덱스가 데이터에 액세스하는 데 더 효율적인 전략이 될 가능성이 낮으므로 테이블 스캔에 의존 할 것입니다.
넓은 테이블 (많은 열)이고 다음을 수행하는 경우 :
SELECT * from Table where Name = 'Boris'
그런 다음 테이블에서 다른 열을 검색하는 것이 이름을 찾는 것보다 더 많은 시간이 걸릴 것이라는 합리적인 가정이라면 테이블 스캔을 수행하도록 선택할 수 있습니다. 어쨌든 많은 행.
인덱스 힌트는 Microsoft Dynamics 데이터베이스 서버에서만 사용할 수 있습니다. 기존 SQL Server의 경우 'Where'절에서 정의한 필터는 엔진이 모든 관련 인덱스를 사용하도록 설득해야합니다. 엔진의 실행 계획이 정보를 읽는 방법을 효율적으로 식별 할 수있는 경우 (전체 테이블 스캔 또는 인덱싱 된 스캔) )-내장 된 성능 최적화 프로그램의 일부로 적절한 명령문을 실행하기 전에 두 가지를 비교해야합니다.
그러나 다음과 같은 것을 사용하여 옵티마이 저가 스캔하도록 강제 할 수 있습니다.
Select *
From [yourtable] With (Index(0))
Where ...
또는 다음과 같은 것을 사용하여 특정 색인을 찾으려면
Select *
From [yourtable] With (Index(1))
Where ...
선택은 당신의 것입니다. 개체 패널에서 테이블의 인덱스 속성을보고 어떤 인덱스를 사용할지 파악하십시오. 필터와 일치해야합니다.
최상의 결과를 얻으려면 가장 적은 결과를 먼저 반환하는 필터를 나열하십시오. 내가 말하는 것이 옳은지는 모르겠지만 쿼리 필터는 순차적 인 것 같습니다. 시퀀스가 올바르게 설정되면 옵티마이 저가 모든 조합을 비교하여이를 수행 할 필요가 없으며 적어도 더 비싼 쿼리와 비교를 시작해서는 안됩니다.