MySQL性能优化——Explain使用分析( 三 )
ref:显示索引的查询条件 , 常量的效果最好 。
例1:EXPLAIN SELECT * FROM order_info WHERE user_id = 1 AND product_name = 'p1'
文章插图
执行结果
ref一列显示两个常量 , 代表查询条件中两个 常量参数 。
例2:explain SELECT * FROM user_info, order_info WHERE user_info.id = order_info.user_id;
文章插图
执行结果
上图中执行order_info表时 , 先进行了索引扫描(tpye类型是index) , 然后在其结果集中 , 用order_info.user_id(ref 列中的值)去user_info表中做匹配 。
rows:是一个重要的字段. MySQL 查询优化器根据统计信息, 估算 SQL 要查找到结果集需要扫描读取的数据行数 , 这个值非常直观显示 SQL 的效率好坏, 原则上 rows 越少越好 。
Extra:EXPLAIN中很多额外信息会显示在Extra上 , 常见有如下几种内容:
- Using filesort
文章插图
执行结果
我们的索引是 KEY `user_product_detail_index` (`user_id`, `product_name`, `productor`)但是上面的查询中根据 product_name 来排序, 因此不能使用索引进行优化, 进而会产生 Using filesort 。 如果我们将排序依据改为 ORDER BY user_id, product_name, 那么就不会出现 Using filesort 了 。
例如:explain SELECT * FROM order_info ORDER BY user_id,product_name;
文章插图
执行结果
- Using index:“索引覆盖” , 表示查询在索引中可以满足 , 不需要回表 。
- Using temporary:查询有使用临时表 , 一般出现于排序, 分组和多表 join 的情况, 查询效率不高, 建议优化 。
附录:演示脚本
CREATE TABLE `user_info` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL DEFAULT '',
`age` INT(11) DEFAULT NULL, PRIMARY KEY (`id`),
KEY `name_index` (`name`)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
INSERT INTO user_info (name, age) VALUES ('xys', 20);
INSERT INTO user_info (name, age) VALUES ('a', 21);
INSERT INTO user_info (name, age) VALUES ('b', 23);
INSERT INTO user_info (name, age) VALUES ('c', 50);
INSERT INTO user_info (name, age) VALUES ('d', 15);
INSERT INTO user_info (name, age) VALUES ('e', 20);
INSERT INTO user_info (name, age) VALUES ('f', 21);
INSERT INTO user_info (name, age) VALUES ('g', 23);
INSERT INTO user_info (name, age) VALUES ('h', 50);
INSERT INTO user_info (name, age) VALUES ('i', 15);
CREATE TABLE `order_info` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`user_id` BIGINT(20) DEFAULT NULL,
`product_name` VARCHAR(50) NOT NULL DEFAULT '',
- 苹果两款新iPad齐曝光:性能提高、入门款更轻薄、售价便宜
- 发售仅7天,性能全国第一:华为、OV一起上,都不如这款手机?
- 视网膜优化?索尼具认知能力电视芯片XR来了
- 传统1/10大小 七彩虹发布最小的mini SSD硬盘:性能首次公开
- 荣耀v40pro对比vivox60pro哪个好区别在哪 性能谁更强
- 华为nova8与小米10对比哪个好 参数配置区别性能评测
- 新型纯蓝OLED可克服目前显示屏蓝光性能不足的挑战
- 骁龙480和天玑720哪个好性能强 规格参数功能对比
- 骁龙732g和骁龙750g哪个好谁性能更强 参数对比评测
- 性能翻倍!飞腾首款8核桌面处理器腾锐D2000详解