Explain을 사용하여 SQL 문을 분석하는 것은 SQL 및 인덱스 문제를 최적화하는 것입니다. 실제 기업 수준의 프로젝트라면 SQL 문이 수만 개에 달할 수도 있기 때문에 일일이 설명하고 분석할 수는 없습니다. 오랫동안 실행되고 성능을 많이 소모하는 SQL을 어디서 얻을 수 있습니까? ?
느린 쿼리 로그를 열 수 있습니다.
특정 비즈니스 및 동시성에 따라 시간 제한(20ms, 100ms)을 추정한 후 비즈니스를 시작하고 스트레스 테스트 후 느린 쿼리 로그를 열고, 실행 시간을 초과하는 SQL을 확인한 후 explain을 사용하여 이러한 시간이 많이 소요되는 SQL 문을 분석합니다.
단계는 다음과 같습니다.
느린 쿼리 로그 스위치 slow_query_log
를 켜세요slow_query_log
设置合理的、业务可以接受的慢查询时间上限
压测执行各种业务
查看慢查询日志,找出所有执行耗时的SQL语句
用explain分析这些耗时的SQL语句,从而针对性优化
MySQL可以设置慢查询日志,当SQL执行的时间超过我们设定的时间,那么这些SQL就会被记录在慢查询日志当中,然后我们通过查看日志,用explain分析这些SQL的执行计划,来判定为什么效率低下,是没有使用到索引?还是索引本身创建的有问题?或者是索引使用到了,但是由于表的数据量太大,花费的时间就是很长,那么此时我们可以把表分成多个小表等。
慢查询日志相关的参数如下所示:
(MySQL定义的很多的全局的开关,都是在全局变量中存储,可以用show/set variables
查看或者设置全局变量的值)
慢查询日志开关默认是关闭的
慢查询日志的路径:默认在/var/lib/mysql/
下
慢查询日志记录了包含所有执行时间超过参数 long_query_time(单位:秒)所设置值的 SQL语句的日志,在MySQL上用命令可以查看,如下:
这个值是可以修改的:
在打开慢查询日志开关的时候,报错表示slow_query_log是一个global的变量(也有只影响当前session的变量,如:long_query_time 、profiling),修改后会影响所有的session,即影响所有正在访问当前MySQL server的客户端。
打开慢查询日志开关成功!
查看另一个session
发现还是默认的10s,故long_query_time只影响当前session
已经超过我们设置的long_query_time=0.1s
路径:/var/lib/mysql/
합리적이고 비즈니스적으로 설정 허용되는 느린 쿼리 시간의 상한
explane을 사용하여 시간이 많이 걸리는 SQL 문을 분석하여 대상 최적화를 수행하세요
show/set 변수
를 사용하여 글로벌 변수를 보거나 설정할 수 있습니다. 값 )
느린 쿼리 로그 스위치 기본값은 닫혀있습니다 느린 쿼리 로그의 경로: 기본값은 /var/lib/mysql/
에 있습니다
/var/lib/mysql/
🎜🎜🎜🎜🎜🎜🎜5 설명을 사용하여 이러한 시간 소모적인 SQL 문을 분석하여 목표한 방식으로 최적화합니다. 🎜🎜🎜🎜 🎜 전체 테이블을 검색하고 전체 기본 키 인덱스 트리를 검색했습니다. 🎜🎜비밀번호에 인덱스를 추가해야 하며, 유형 변환이 포함되면 인덱스를 사용할 수 없으므로 비밀번호가 문자열 형식이라는 점을 기억해야 합니다.🎜🎜3 SQL의 특정 실행 시간을 보려면 프로필을 표시하세요🎜🎜 MySQL은 일반적으로 소수점 이하 두 자리만 표시합니다. Time🎜🎜🎜 더 자세한 시간을 표시하려면 프로파일링 스위치를 켜세요🎜
프로파일링 변수가 현재 세션에만 영향을 미친다는 것을 나타내는 오류가 보고되지 않습니다
위 내용은 MySQL 느린 로그 쿼리 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!