system > const > eq_ref > ref > range > index > ALL
- ALL
- index
- range
SELECT * FROM tbl_name WHERE key_column = 10; SELECT * FROM tbl_name WHERE key_column BETWEEN 10 and 20; SELECT * FROM tbl_name WHERE key_column IN (10,20,30); SELECT * FROM tbl_name WHERE key_part1 = 10 AND key_part2 IN (10,20,30);
- ref
SELECT * FROM ref_table WHERE key_column=expr; SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column; SELECT * FROM ref_table,other_table WHERE ref_table.key_column_part1=other_table.column AND ref_table.key_column_part2=1;
- eq_ref
SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column; SELECT * FROM ref_table,other_table WHERE ref_table.key_column_part1=other_table.column AND ref_table.key_column_part2=1;
- const
SELECT * FROM index_test WHERE id =1
- system
possible_keys当前查询中可能用到的索引 。
key当前查询用到的真实索引 。当可能走索引插叙,但实际没有用到索引查询,你可能需要去分析表,更新索引统计数据,让索引更有效利用 。
-- 实际就是更新索引的统计数据,让索引更有效利用,一般在空闲的时候做 。 ANALYZE TABLE table_name;
key_len不损失精确性的前提下,越小越好 。ref哪个字段或常数与 key 一起被使用
rows,重点关注显示此查询一共扫描了多少行,这个是一个估计值 。此值越少性能越好 。
filtered表示此查询条件所过滤的数据的百分比
extra,需要关注extra 包含 Using filesort 和 Using temporary 考虑优化 。
- Using where
- Useing index
- Using temporary
- Using filesort
show profileshow profile 可以看到 sql执行在哪块比较耗时,cpu/内存/io 等等
-- 查看 profile 是否开启,默认是关闭的 。 show variables like '%profil%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | have_profiling | YES | | profiling | OFF | | profiling_history_size | 15 | +------------------------+-------+ -- 开启 profile set profiling=1; -- 查看已经执行的 sql SHOW PROFILES;
文章插图
-- show profile cpu, block io, memory,swaps,context switches,source for query [Query_ID]; -- 查看具体某个执行 sql show profile cpu, block io, memory,swaps,context switches,source for query [Query_ID]; -- 先执行 SHOW PROFILES;拿到 query_id 在执行下面的 sql show profile cpu, block io, memory,swaps,context switches,source for query 173;
SHOW PROCESSLIST查看数据库线程中的状况 。文章插图
SHOW PROCESSLIST; SELECT * FROM information_schema.`PROCESSLIST`;
结合 top/vmstat/IOStat 可以定位mysql 中 cpu,io,内存相关问题 。 # 查看 mysqld 的进程 ps -ef | grep mysqld | grep -v grep # 查看 mysqld 中的线程 top -Hp 5762 # 或者一步到位,查看 mysqld 下的线程 top -Hp `ps -ef | grep mysqld | grep -v grep | awk '{print $2}'`
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 做SEO的关键不是优化技巧,而是关键词的选择
- SQL注入原理及防御
- 菊花图片,湖南观赏菊菊花苗品种及图片
- 千日红禁忌,千日红的功效与作用及禁忌
- 职业装|青岛推送实习见习及招聘岗位1.2万个 欢迎“青雁归巢”
- 养生茶配方大全及功能,养生茶配方大全
- 古埃及金字塔未解之谜 埃及金字塔之谜的真相
- 怎么制作柠檬茶,如何制作金桔柠檬茶及其功效是什么呢
- 玉兰药用部位及功效,玉兰花的功效与作用及禁忌
- 束向日葵花图片,向日葵花图片及功效作用