1. 일부 일반적인 SQL 관행
(1) 부정적인 조건부 쿼리는 색인을 사용할 수 없습니다.
》
은 쿼리에서 최적화할 수 있습니다:
select * from order where status!=0 and stauts!=1
select * from order where status in(2,3)
select * from order where desc like '%XX'
select * from order where desc like 'XX%'
select * from user where sex=1
select * from order where YEAR(date) < = '2017'
select * from order where date < = CURDATE()
2. 잘 알려지지 않은 SQL 실습
(5) 대부분의 비즈니스가 단일 쿼리인 경우 사용자 센터와 같이 Hash 인덱스를 사용하는 성능이 더 좋습니다select * from order where date < = '2017-01-01'
해시 인덱스의 시간 복잡도는 O(1)
(6) 열이 null이 허용되면 쿼리에 잠재적인 함정이 있습니다단일 열 인덱스는 저장하지 않습니다 null 값이 허용되며 복합 인덱스는 모든 null 값을 저장하지 않습니다. 열이 null이 허용되면 "예기치 않은" 결과 집합이 나타날 수 있습니다.select * from user where uid=? select * from user where login_name=?
select * from user where name != 'shenjian'
select * from user where login_name=? and passwd=? select * from user where passwd=? and login_name=?
select * from user where login_name=?
ENUM은 TINYINT를 저장합니다. 열거형에 일부 ""를 사용하지 마세요. "China", "Beijing" 및 "Ministry of Technology"와 같은 문자열은 문자열 공간이 크고 효율성이 낮습니다.
3. 틈새지만 유용한 SQL 연습
(9) 하나의 결과만 반환된다는 것을 알고 있는 경우 제한 1은 효율성을 향상시킬 수 있습니다.select * from user where passwd=?
select * from user where login_name=?
알고 계시는 대로 하나의 결과일 뿐인데 데이터베이스는 알지 못하므로 명확하게 알려주고 적극적으로 커서 이동을 중지하도록 하세요
(10) 데이터의 CPU를 절약하는 것 외에도 데이터베이스 계층 대신 비즈니스 계층에 계산을 넣습니다. 예상치 못한 쿼리 캐시 최적화 효과도 있습니다select * from user where login_name=? limit 1
select * from order where date < = CURDATE()
$curDate = date('Y-m-d'); $res = mysql_query( 'select * from order where date < = $curDate');
mysql tutorial
칼럼에서 가져온 것입니다. 배우신 것을 환영합니다!위 내용은 잘 알려지지 않은 10가지 SQL 문 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!