1.命令:
show status like 'Com__'
通过该命令可以知道当前数据库是以查询为主还是更新为主。如果是查询为主,就重点查询,如果增删改多就优化写入操作。
2.
explain+sql语句
查询sql语句的执行过程,通过分析过程,我们可以得到的信息如下:
- 哪些步骤耗费的成本比较高。
- 哪些步骤产生的数据量多(数据量的多少用线条表示,比较直观)。
- 这条sql语句是否走索引。
3.show profile分析SQL
可以查看所有sql语句的执行效率(所用时间),前提是这个命令需要被打开。打开这个命令之后执行的所有的sql语句,他都能记录下执行时间,并展示出来。
可以通过这个命令分析哪些命令执行效率低、耗时长,就去针对性的优化这条sql语句。
4.慢查询日志(比较常用的工具)
慢查询日志记录了所有执行时间超过long_query_time的sql语句的日志,long_query_time的值默认是10秒(可以通过修改配置文件设置)。
日志保存在 /var/lib/mysql/目录下, 名字是slow_query.log。
2023.11.16
1.explain出来的结果中的type字段代表mysql如何查找表中的数据,查找数据记录的大概范围,最优到最差如下
system > const > eq_ref > ref > range > index > all
null:表示当前查询不需要访问表或者从索引树中就可以获得我们需要的数据。比如说我们就查主键索引的字段或者select 1这样无意义的查一个常数。
system:表只有一行时。
const:走主键或者唯一索引时。
eq_ref:走唯一索引,举个例子 SELECT a.*, b.* FROM film a, film_text b WHERE a.film_id = b.film_id; 其中两个film_id字段都是主键,也就是唯一索引。
ref:
使用非唯一索引或者唯一索引的前缀扫描,返回匹配某个单独值的记录行
使用非唯一性索引的联表查询
range:索引范围扫描,常见于< 、<=、>、>=、between、in等操作符
index:索引全扫描,MySQL遍历整个索引查找匹配的行(虽然where中没有使用索引,但是查找的列是索引列,只要全表扫描索引即可,直接使用索引树查找数据)
all:全表扫描