일반적인 SQL 최적화 방법

SQL 최적화 방법

1. 쿼리 최적화는, 첫째 경우 주문에 포함 된 열을 기준으로 색인을 고려해야합니다, 전체 테이블 스캔을 피하려고한다.

2. 필드 WHERE 절 판정 null 값 피해야 엔진과 같은 인덱스 테이블 전체 스캔하여 포기 발생할 :  
NUM가 null T가 어디로부터 SELECT ID
0 NUM의 디폴트 값 상에 제공 될 수있다, 보장 NUM 테이블 열 값이 널이 다음 쿼리 아니다 :
SELECT ID WHERE T = 0에서 NUM

3 그렇지 않으면 엔진이 인덱스와 전체 테이블 스캔을 사용하여주고, 절! = 또는 <> 연산자를 피해야한다.

4. 연결 조건을 피하거나 where 절에 사용되어야한다, 그것은 같은 인덱스와 전체 테이블 스캔을 사용하여 포기 엔진을 발생합니다 :    

t에서 ID를 선택 여기서 NUM = 10 NUM = 20    
可以这样查询:    
t에서 선택 자료 여기서 NUM = 10    
연합 모든    
t에서 선택 자료 여기서 NUM = 20    

5.in 그렇지 같은, 전체 테이블 스캔으로 이어질뿐만에주의하여 사용되어야한다 :    
위에서부터 ID 언급에 SELECT NUM t (2, 3) 여기서    
: 연속 값의 경우, 그 사이에 사용할 수없는    
선택 (SELECT)는 상술 한 ID t의 위치를 NUM (1)과 (3) 사이    

6. 다음 쿼리는 전체 테이블 스캔 발생합니다 :    
WHERE 이름 '%% ABC'처럼 T에서 ID를 선택    

7. 엔진이 인덱스와 전체 테이블 스캔을 사용하여 포기하는 원인이 WHERE 절에 필드 작업 식을 피해야한다. 예를 들면 :    
SELECT ID WHERE NUM에서 T / 2 = 100    
읽어야    
WHERE NUM = 100 * 2 T로부터 SELECT ID    

8 엔진의 원인이됩니다 절은 인덱스와 전체 테이블 스캔을 사용하여 제공 할 수있는 분야에서 기능 작동으로 피해야한다. 예를 들면 :    
SELECT ID WHERE T 문자열 (이름, 1,3) = 'ABC'- 이름 아이디 ABC 시작    
읽어야    
SELECT ID를 T에서 WHERE 이름 '%의 ABC'처럼    

9. where 절에서 함수, 산술 연산, 또는 기타 표현을 수행하지 마십시오 "="왼쪽 또는 시스템이 제대로 색인이 작동하지 않을 수 있습니다.    

인덱스가 지수 인 경우, 시스템을 보장하기 위해 첫 번째 필드에 인덱스를 사용해야합니다, 인덱스 필드를 사용하는 조건으로 (10)는 조건으로 인덱스를 사용한다    
, 그렇지 않으면 인덱스가 사용되지 않으며,해야 해당 필드의 순서가 순서 인덱스와 일치하므로 가능한 한 많이.    

11. 같은 빈 테이블 구조를 만들 필요로 이해가되지 않습니다 쿼리 작성하지 마십시오 :    
1 = 0 WHERE의 t에서 #T INTO은 SELECT COL1, COL2    
이 코드는 어떤 결과 집합을 반환하지 않습니다,하지만 시스템 자원을 소모 변경해야 이 같은 :    
테이블 #T 만들기 (...)    

좋은 선택으로 많은 경우에 대체 (12)이 존재합니다 :    

에 NUM (어디에서 NUM을 선택     B에서 선택 NUM)
다음 내용으로 대체되어    
존재하는 A로부터 NUM을 선택 (. 선택을 B에서 WHERE NUM = a.num)    

13. 모든 인덱스가 유효한 쿼리이며, SQL 쿼리 최적화는 인덱스 컬럼 데이터의 중복을 많이 가지고 할 때 테이블의 데이터에 따라 수행되며, SQL 쿼리가 인덱스를 사용하지 수, 테이블에 필드 섹스를 가지고 같은, 남성, 인덱스는 섹스에 쿼리의 효율성에 영향을 내장하지 않는 경우에도 각 여성의 거의 절반.

14. 인덱스 할 수없는, 해당 인덱스는 확실히 선택의 효율성을 향상시킬 수 있습니다뿐만 아니라, 삽입 및 업데이트의 효율을 감소 , 삽입 또는 업데이트가 인덱스를 다시 작성합니다 때 가능하며, 인덱스가 조심스럽게 방법을 구축하는 것으로 간주 될 필요로 으로하여 케이스 일 수있다. 인덱스 번호 테이블은 너무 많은 당신은 몇 가지를 고려해야하는 경우, 이하 여섯 가장 적합한 자주 필요한 경우 인덱스 열을 구축하는 데 사용됩니다.    

숫자 정보를 포함하는 필드 만이 연결 및 쿼리의 성능을 감소시키는 캐릭터 디자인, 가능하지 않고, 스토리지 비용이 증가하는 경우도 15는, 숫자 필드 사용한다. 엔진이 처리 쿼리 및 연결 문자열에서 각 문자를 비교 하나, 및 숫자 비교를 위해 한 번만 충분하면 때문이다.      

대신 문자의 16 가능한 varchar를 사용, 모든 가변 길이의 첫 번째는 작은 저장 공간을 필드 있기 때문에, 당신은 저장 공간에 저장할 수 있습니다 검색 효율이 상대적으로 적은 필드에 쿼리 다음에 명확하게 높다.      

17. 이하로 필드 중 하나를 반환하지 않는 대신 "*"의 필드의 특정 목록, t에서 * 어디를 선택 사용하지 마십시오.    

18. 피 자주는 자원의 소비를 줄이기 위해, 시스템 테이블을 작성하고 임시 테이블을 삭제합니다.

19. 임시 테이블은 대형 테이블이나 테이블은 일반적으로 참조에게 데이터 세트를 복제해야 할 때, 예를 들어,보다 효율적으로 특정 루틴의 적절한 사용을 만들 수 있습니다 사용할 수 없습니다. 그러나 일회성 이벤트의 경우, 수출 테이블을 사용하는 것이 가장 좋습니다.    

20. 하나는 많은 양의 데이터를 삽입하는 경우, 새로운 임시 테이블은, 그 대신, 로그의 다수를 피하기 위해, 테이블을 작성으로 선택 사용될 수있다 때 속도를 증가시키기 위해, 경우, 정상적으로 시스템 리소스 테이블을 완화시키기 위해 작은 데이터 테이블을 만든 다음 삽입합니다.

모든 임시 테이블 저장 프로 시저, 첫째 잘라야 테이블의 끝에서 삭제 명시 적, 다음 테이블을 삭제해야하는 임시 테이블을 사용하는 경우 (21)는, 시스템 테이블에게 시간이 오래 잠금 방지 할 수 있습니다.    

22. 커서의 가난한 효율성이 커서 작업 10,000 개 이상의 라인, 당신은 다시 작성해야하기 때문에, 커서를 사용하지 않도록하십시오.

(23)를 사용하여 임시 테이블을 기반으로하는 방법 또는 방법 전에 커서, 당신은 문제가, 일반적으로 더 효율적인 세트를 기반 방법을 해결하기 위해 설정 기반 솔루션을 찾아야한다.

(24) 임시 테이블은, 커서는 사용할 수 없습니다. 작은 데이터 세트는 다른 진보적 인 치료 방법보다 일반적으로 더 나은에 필요한 데이터를 얻기 위해해야합니다 여러 테이블에 특히 참조, FAST_FORWARD 커서를 사용합니다.
결과 집합 빠른 커서 속도를 사용하여 수행 일반적인 루틴보다 "전체"를 포함한다. 개발 시간이 허락, 커서 기반 방법과 기반 접근 방식을 설정할 수 있습니다 경우 더 나은 어떤 방법을 보려고합니다.

25. 큰 트랜잭션 작업을 피 시스템 동시성을 향상시키기 위해보십시오.

(26) 피 데이터가 너무 큰 경우, 당신은 해당 수요가 합리적이다 고려해야한다, 클라이언트에 많은 양의 데이터를 반환했습니다.

추천

출처www.cnblogs.com/xiangpeng/p/11032047.html