mysql如何查看select语句是否进⾏了全表扫描?以及后续优化
sql语句
如何查看select语句是否进⾏了全表扫描
sql优化
⾯试问题
1.如何查看select语句是否进⾏了全表扫描?
mysql中使⽤explain关键字
语法:
explain select * from t_collect
查询结果:
这⾥可以看到图中的“type”列的值为ALL说明全表扫描。
type解释:
表⽰MySQL在表中到所需⾏的⽅式,⼜称“访问类型”。
常⽤的类型有: ALL, index, range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好)
ALL:Full Table Scan, MySQL将遍历全表以到匹配的⾏
index: Full Index Scan,index与ALL区别为index类型只遍历索引树
range:只检索给定范围的⾏,使⽤⼀个索引来选择⾏大学生为什么要学c语言
ref: 表⽰上述表的连接匹配条件,即哪些列或常量被⽤于查索引列上的值
perl程序设计eq_ref: 类似ref,区别就在使⽤的索引是唯⼀索引,对于每个索引键值,表中只有⼀条记录匹配,简单来说,就是多表连接中使⽤primary key或者 unique key作为关联条件
const、system: 当MySQL对查询某部分进⾏优化,并转换为⼀个常量时,使⽤这些类型访问。如将主键置于where列表中,MySQL 就能将该查询转换为⼀个常量,system是const类型的特例,当查询的表
只有⼀⾏的情况下,使⽤system
NULL: MySQL在优化过程中分解语句,执⾏时甚⾄不⽤访问表或索引,例如从⼀个索引列⾥选取最⼩值可以通过单独索引查完成。
2.sql优化
通过上⾯的explain关键字咱们可以知道本条sql语句是否会全表扫描,那接下来接根据这个查询结果来查看sql语句是否被优化。
1.编写sql语句如下,根据cid查,这⾥cid不是索引
explain select * from t_collect where cid = 2
结果:
由上图看type的值依旧为ALL,说明是全表扫描。dubbometadataservice
2.将cid设置为索引,继续查询
结果:
这⾥的type值为ref,说明⽤于索引查,更⾼级的优化这⾥不再详细说明,希望我这⾥抛出的砖头能让你引出美⽟。
3.⾯试问题
这⾥想引申⼀下很久之前⾃⼰⾯试的经历,之前⾯试的时候被⾯试官问过关于全表扫描的问题,但是当时⾃⼰回答的很不好,希望读者遇到类似的问题能轻松解答。
下⾯列举⼀个印象最深的⼀串问题:
如果将t_collect表中的cid字段和type字段创建为⼀个组合索引,组合索引的创建顺序是cid,type ;
即:ALTER TABLE `t_collect` ADD INDEX cid_type (cid,type);
1.如果查询条件为cid时select * from t_collect where cid = 1语句会不会全表扫描?
2.如果查询条件为type时select * from t_collect where type = 1语句会不会全表扫描?
mysql面试题sql语句多表联查
3.如果select * from t_collect where type = 1 and cid = 1语句会不会全表扫描?
flask凡氪电子烟4.如果select * from t_collect where cid = 1 and type = 1语句会不会全表扫描?
所⽤表结果:
CREATE TABLE `t_collect` (
sql数据库手动备份`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`cid` int(11) DEFAULT NULL COMMENT '内容id',
`type` int(11) DEFAULT NULL COMMENT '类型 0:蜂品种;1:蜂产品;2:病⾍害',
`state` int(11) DEFAULT NULL COMMENT '状态 0:取消;1:收藏',
`uid` int(11) DEFAULT NULL COMMENT '收藏⼈id',
`modifyTime` datetime DEFAULT NULL COMMENT '修改时间',
`createTime` datetime DEFAULT NULL COMMENT '收藏时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='收藏表';
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论