一名高级的Javaer,应该了解的 MYSQL 高级知识点( 二 )

  • 第二条: 确保查询使用了正确的索引
经常出现在 WHERE 条件中的字段建立索引,可以避免全表扫描;
将 ORDER BY 排序的字段加入到索引中,可以避免额外的排序操作;
多表连接查询的关联字段建立索引,可以提高连接查询的性能;
将 GROUP BY 分组操作字段加入到索引中,可以利用索引完成分组 。
  • 第三条: 避免让索引失效
在 WHERE 子句中对索引字段进行表达式运算或者使用函数都会导致索引失效
使用 LIKE 匹配时,如果通配符出现在左侧无法使用索引
如果 WHERE 条件中的字段上创建了索引,尽量设置为 NOT NULL
SQL的执行顺序:我们写的sql:
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
sql的执行顺序:
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
 MYSQL的7种join:
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
慢查询日志分析: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 :未使用索引的查询也被记录到慢查询日志中(可选 项) 。如果调优的话,建议开启这个选项 。


推荐阅读