[데이터베이스] SQL 문 최적화 기술

1. 내용

1 、 선택

1-1. 색인

  • "="를 사용해보십시오 . 인덱스 사용량을 늘리기 위해 "<>"를 사용하지 마십시오.
  • 주의해서 사용하십시오 . xx와 yy 사이로 대체 할 수있는 전체 테이블 스캔이 발생할 수 있습니다.
  • 조건을 피하거나 결합하십시오 . 또는 각 조건 열에 색인이있는 것을 고려하십시오.
  • 필드 계산을 피하십시오 . 함수, 네 가지 산술 등
  • 복합 색인의 첫 번째 필드는 색인 사용을 보장 할 수 있습니다 .
  • 인덱스는 가능한 한 많지 않습니다 . 삽입 / 업데이트하면 인덱스가 다시 작성됩니다. 일반적으로 6 개 이하.

1-2. 수량

1. 제한은 제한된 수의 결과를 쿼리하는 데 사용되며 페이징에도 사용할 수 있습니다. 전체 테이블 스캔을 피하십시오. 데이터베이스와 애플리케이션 간의 불필요한 네트워크 전송 감소
2. 적절한 데이터 유형을 선택합니다 .

  • SMALLINT를 TINYINT로 대체하여 메모리 및 디스크 소비를 줄이십시오. Varchar는 char를 대체하여 저장 공간을 절약하고 쿼리 효율성을 향상시킬 수 있습니다.
  • 숫자 필드는 문자 유형을 대체하여 비교 횟수를 줄입니다. 문자열은 각 문자를 하나씩 비교하는 반면 숫자 유형은 한 번만 비교합니다.

3. 허용되는 경우 UNION을 UNION ALL로 바꿉니다 . UNION ALL은 중복을 제거하지 않기 때문에 더 효율적입니다. 
4. 사용을 피하십시오 SELECT * . 전체 테이블 스캔을 피하고 인덱스를 효과적으로 사용할 수 없으며 네트워크 IO 오버 헤드를 증가시킵니다.
5. 조건 필드를 인덱싱하십시오 . WHERE, JOIN 및 ORDER BY 절의 열은 가능한 한 많이 인덱싱되어야합니다.

2. 문 삽입

1. 로드 텍스트 파일은 여러 파일을 삽입하는 것보다 빠릅니다 .
2. 큰 INSERT, DELETE 및 UPDATE 쿼리 여러 개의 작은 쿼리 분할합니다.

3 、 그룹

1. 정렬을 금지하기 위해 null로 순서를 지정합니다 . 기본적으로 col1, col2로 그룹화하고 col1, col2로 정렬하면 결과가 비슷하게 정렬됩니다. 추가 : 파일 정렬은 시간이 많이 걸립니다.

4 、 주문

1. 동일한 인덱스를 사용하는 조건 및 순서가 동일한 경우 && 순서 및 인덱스 순서가 동일한 경우 필드 별 && 순서는 오름차순 또는 내림차순입니다.

 例:下列SQL可以使用索引:
SELECT * FROM t1 ORDER BY key_part1, key_part2,... ; 
SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC; 
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; 
 
但以下几种情况下则不使用索引: 
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;  
--order by的字段混合ASC和DESC 
SELECT * FROM t1 WHERE key2=constant ORDER BY key1;  
--用于查询行的关键字与ORDER BY中所使用的不相同 
SELECT * FROM t1 ORDER BY key1, key2;  
--对不同的关键字使用ORDER BY:

5. 중첩 쿼리

1. 경우에 따라 하위 쿼리가 JOIN으로 대체됩니다.

# SQL1
select * from sales2 where company_id not in ( select id from 
company2 )

# SQL2 
select * from sales2 left join company2 on sales2.company_id = 
company2.id where sales2.company_id is null

# SQL1 VS SQL2
1、这里join之所以更快,是因为不需要在内存中创建临时表完成SQL1中两个步骤的查询工作。 
2、当company2表的id有索引,性能会更好。

6. 기타

1. 색인 힌트 :

  • USE INDEX는 MySQL이 참조 색인을 참조하고 다른 색인은 무시하도록 프롬프트합니다.
  • IGNORE INDEX는 하나 이상의 인덱스를 무시합니다.
  • FORCE INDEX는 참조 인덱스를 사용하도록합니다.

2. 동일한 결과 집합을 여러 번 실행하면 SQL 문을 일관되게 유지하고 쿼리 버퍼를 최대한 활용합니다.

例:
第1次:SELECT price FROM order WHERE id = 123456 and region = 'BEIJING';2次:同样查询,请保持语句一致性,如不要将where里id和region调换。 

3. SQL 튜닝은 실제 데이터 세트와 하드웨어 환경이 가장 가까운 개발 환경에서 가장 잘 테스트 된 다음 프로덕션 환경으로 릴리스됩니다.

둘째, 참조

1. "간단한 방법으로 MySQL 배우기"-18 장 SQL 최적화

추천

출처blog.csdn.net/HeavenDan/article/details/112224299