1. 쿼리를 최적화하려면 전체 테이블 스캔을 피하십시오. 먼저 where 및 order by와 관련된 열에 인덱스를 생성하는 것을 고려하십시오.
2. where 절의 필드에 대한 null 값 판단을 피하십시오. 그렇지 않으면 엔진이 인덱스 사용을 포기하고 다음과 같이 전체 테이블 스캔을 수행합니다.
select id from t where num is null
num에 기본값을 0으로 설정하여 보장할 수 있습니다. 열에 null 값이 없으면 다음과 같이 쿼리하세요.
select id from t where num=0
3. where 절에 != 또는 a8093152e673feb7aba1828c43532094 연산자를 사용하지 마세요. 그렇지 않으면 엔진이 인덱스 사용을 포기합니다. 그리고 전체 테이블 스캔을 수행합니다.
4 조건을 연결하기 위해 where 절에 or 를 사용하지 마세요. 그렇지 않으면 엔진이 인덱스 사용을 포기하고 다음과 같이 전체 테이블 스캔을 수행합니다.
select id from t where num=10 or num=20
다음과 같이 쿼리할 수 있습니다:
select id from t where num=10 union all select id from t where num=20
5.in 및 not In도 주의해서 사용해야 합니다. 그렇지 않으면 다음과 같이 전체 테이블 스캔이 발생합니다.
select id from t where num in(1,2,3)
연속 값의 경우 사이에 사용할 수 있으면 in을 사용하지 마세요:
select id from t where num between 1 and 3
6. 다음 쿼리도 전체 테이블 스캔을 발생시킵니다.
select id from t where name like '%abc%'
7. where 절의 필드에 표현식 작업을 수행하지 마세요. 그러면 엔진이 인덱스 사용을 포기하고 전체 테이블 스캔을 수행하게 됩니다. 예:
select id from t where num/2=100
는
select id from t where num=100*2
8로 변경해야 합니다. where 절의 필드에 기능적 작업을 수행하면 엔진이 인덱스 사용을 포기하고 전체 테이블 스캔을 수행하게 됩니다. 예:
select id from t where substring(name,1,3)='abc'--name以abc开头的id
는
select id from t where name like 'abc%'
9로 변경되어야 합니다. where 절의 "=" 왼쪽에서 함수, 산술 연산 또는 기타 표현식 연산을 수행하지 마십시오. 그렇지 않으면 시스템이 수행하지 못할 수 있습니다. 인덱스를 올바르게 사용하십시오.
10. 인덱스 필드를 조건으로 사용할 때 인덱스가 복합 인덱스인 경우 시스템이 인덱스를 사용하는지 확인하기 위해 인덱스의 첫 번째 필드를 조건으로 사용해야 합니다.
그렇지 않으면 인덱스가 작동하지 않습니다. 사용되며, 필드 순서는 인덱스 순서와 최대한 일치해야 합니다.
11. 의미 없는 쿼리를 작성하지 마세요. 예를 들어 빈 테이블 구조를 생성해야 하는 경우:
select col1,col2 into #t from t where 1=0
이 유형의 코드는 결과 집합을 반환하지 않지만 시스템 리소스를 소비하게 됩니다. 이거:
create table #t(...)
위 내용은 SQL 최적화의 여러 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!