- 第二条: 确保查询使用了正确的索引
将 ORDER BY 排序的字段加入到索引中,可以避免额外的排序操作;
多表连接查询的关联字段建立索引,可以提高连接查询的性能;
将 GROUP BY 分组操作字段加入到索引中,可以利用索引完成分组 。
- 第三条: 避免让索引失效
使用 LIKE 匹配时,如果通配符出现在左侧无法使用索引
如果 WHERE 条件中的字段上创建了索引,尽量设置为 NOT NULL
SQL的执行顺序:我们写的sql:

文章插图
sql的执行顺序:

文章插图
MYSQL的7种join:

文章插图
慢查询日志分析:MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间 超过阈值的语句 。
默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置这个参数 。
如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影 响 。
慢查询日志支持将日志记录写入文件和数据库表 。
SHOW VARIABLES LIKE "%query%" ;slow_query_log:是否开启慢查询日志,1 表示开启,0 表示关闭 。slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径 。long_query_time: 慢查询阈值,当查询时间多于设定的阈值时,记录日志 。默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的mysql> SHOW VARIABLES LIKE '%slow_query_log%';+---------------------+-----------------------------------+| Variable_name | Value |+---------------------+-----------------------------------+| slow_query_log | OFF || slow_query_log_file | /var/lib/mysql/localhost-slow.log |+---------------------+-----------------------------------+可以通过设置slow_query_log的值来开启mysql> set global slow_query_log=1;mysql> SHOW VARIABLES LIKE '%slow_query_log%';+---------------------+-----------------------------------+| Variable_name | Value |+---------------------+-----------------------------------+| slow_query_log | ON || slow_query_log_file | /var/lib/mysql/localhost-slow.log |+---------------------+-----------------------------------+使用 set global slow_query_log=1 开启了慢查询日志只对当前数据库生效,MySQL重启后则 会失效 。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)
-- 编辑配置vim /etc/my.cnf-- 添加如下内容slow_query_log =1slow_query_log_file=/var/lib/mysql/lagou-slow.log-- 重启MySQLservice mysqld restartmysql> SHOW VARIABLES LIKE '%slow_query_log%';+---------------------+-------------------------------+| Variable_name | Value |+---------------------+-------------------------------+| slow_query_log | ON || slow_query_log_file | /var/lib/mysql/lagou-slow.log |+---------------------+-------------------------------+那么开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢?这个是由参数 long_query_time 控制,默认情况下long_query_time的值为10秒
mysql> show variables like 'long_query_time';+-----------------+-----------+| Variable_name | Value |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+注意:使用命令 set global long_query_time=1 修改后,需要重新连接或新开一个会话才能 看到修改值 。mysql> set global long_query_time=1;mysql> show variables like 'long_query_time';+-----------------+----------+| Variable_name | Value |+-----------------+----------+| long_query_time | 1.000000 |+-----------------+----------+log_output 参数是指定日志的存储方式 。log_output='FILE' 表示将日志存入文件,默认值 是'FILE' 。log_output='TABLE' 表示将日志存入数据库,这样日志信息就会被写入到 mysql.slow_log 表中 。
mysql> SHOW VARIABLES LIKE '%log_output%';+---------------+-------+| Variable_name | Value |+---------------+-------+| log_output | FILE |+---------------+-------+系统变量log-queries-not-using-indexes :未使用索引的查询也被记录到慢查询日志中(可选 项) 。如果调优的话,建议开启这个选项 。
推荐阅读
- 三国第一名将张辽,三国第一名将张辽
- 如何成为一名优秀的网络推广员
- 做一个坚强独立的女人?成为一名独立自强的女人
- 如何成为一名后端开发工程师
- 假如长大后我成为了一名教师?一位老师改变了一个学生
- 梁羽生武侠人物排名是什么?
- 陆地十大毒蛇 陆地上最毒的蛇第一名
- 中国女富豪第一名 中国美女富豪榜女首富的排名
- 十六国第一名将 古代名将六十四人72名将
- 人生最高级的活法是享受孤独?人活到极致-会赚钱,能独处,常读书
