索引语法
1、创建索引时候 [UNIQUE | FULLTEXT] 关键字是可选的;
1)加上 UNIUQE 就是创建唯一索引(唯一索引,说明改字段不能出现重复数据);
2)加上FULLTEXT 创建的是一个全文索引;
3)不加这两个参数,创建的就是一个常规索引;
2、最后 (index_col_name,...) 是在哪个列上创建索引;
其中 "(index_col_name,...)" 说明一个索引可以关联多个字段;
一个索引只关联一个字段,叫单列索引;一个索引关联多个字段叫组合索引又叫联合索引;
3、索引名命名最好是 idx_表名_字段名;例如 idx_user_name,user表name字段建索引;
SQL性能分析
我们为什么要学习SQL性能分析?因为要对SQL做优化。主要对select语句做优化,其中索引优化占据了主导地位;
SQL执行频率
为什么需要使用SQL执行频率?
比如一个数据库的数据都是以增删改为主,那么我们没有必要对此数据库进行优化,或者优化程度可以放轻;通过SQL执行频率来确定,当前数据增删改查比例,从而确定对应优化方案,如果增删改为主,优化程度可以放轻。
如何查看SQL使用频率?
MySQL客户端连接成功后,通过 show[session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的 insert,update,delete,select 的访问频次:
注意:一个下划线 ‘_’ 就代表一个字符;这里一共是 7 个字符;
show global status like 'Com_______'; -- 查看当前会话的状态信息
如下图:查看当前数据库它的查询、它的插入、它的更新、他的删除次数是多少:
慢查询日志
为什么要学习慢查询日志?
前面学习的查看SQL执行频率,只能知道哪种SQL执行频率比较高。我们现在需要对SQL进行优化,那么针对哪些SQL语句进行优化呢,此时我们就需要借助数据库的慢查询日志,来定位哪些SQL语句执行效率比较低,从而进行优化。
慢查询日志定义:
慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。(执行时间超过10秒的SQL会被记录在慢查询日志中)(查看慢查询日志开关show variables like 'show_query_log'; )
MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:
修改慢查询日志配置-具体操作:
1)通过mysql下的my.ini文件可以找到慢查询日志文件:
slow-query-log=1 //这个是慢查询日志开启,0表示关闭
slow_query_log_file=“MS-PHBDRPNRECXU-slow.log”//这个就是慢查询文件,位置在C:\ProgramData\MySQL\MySQL Server 5.6\data;
long_query_time=2 //这个是超过2秒的操作会记录下来。
2)通过mysql客户端查询一个200万行的表:
select count(*) from tb_sku;
3)这时候打开慢查询日志文件中就会记录下刚才的查询过程。
# Time: 221021 21:25:44
# User@Host: root[root] @ localhost [::1] Id: 2
# Query_time: 3.017051 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 2000000
SET timestamp=1666358744;
select count(*) from tb_sku;
慢查询日志所在位置:
注意:可能根据版本不同,慢查询日志名不一样;我这边可能日志名不是 show_query_log