目录
MySQL进阶篇的索引部分基本上要结束了,这里就剩下SQL提示、覆盖索引、前缀索引以及单例联合索引的内容。那本期的话我们就先讲解SQL提示和覆盖索引先,剩下的内容就下一期作为完结篇讲解。
上一期链接MySQL进阶-----索引的语法与SQL性能分析-CSDN博客 ,下面这个表的内容均来自上一期的,可以通过上一期查看。
目前tb_user表的数据情况如下:
索引情况如下:
把上述的 index_age 这个之前测试使用过的索引直接删除。
drop index index_age on tb_user;
这里我们通过案例去初步认识SQL提示(索引的使用)
A. 执行SQL : explain select * from tb_user where profession = '软件工程';
B. 执行SQL,创建profession的单列索引:create index index_pro on tb_user(profession);
(1) use index : 建议 MySQL 使用哪一个索引完成此次查询(仅仅是建议, mysql 内部还会再次进行评估)。explain select * from 表名字 use index(索引名字) where 条件;
(2)ignore index : 忽略指定的索引。explain select * from 表名字 ignore index(索引名字) where 条件;
(3) force index : 强制使用索引。explain select * from 表名字 force index(索引名字) where 条件;
示例演示:
explain select * from tb_user use index(index_pro) where profession = '软件工
程';
explain select * from tb_user ignore index(index_pro) where profession = '软件工
程';
explain select * from tb_user force index(pro_age_sta) where profession =
'软件工程';
接下来,我们来看一组SQL的执行计划,看看执行计划的差别,然后再来具体做一个解析。
explain select id, profession from tb_user where profession = '软件工程' and age =
31 and status = '0' ;
explain select id,profession,age, status from tb_user where profession = '软件工程'
and age = 31 and status = '0' ;
explain select id,profession,age, status, name from tb_user where profession = '软
件工程' and age = 31 and status = '0' ;
explain select * from tb_user where profession = '软件工程' and age = 31 and status
= '0';
执行结果如下:
Extra | 含义 |
Using where; Using Index | 查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据 |
Using index condition | 查找使用了索引,但是需要回表查询数据 |
思考题:一张表, 有四个字段(id, username, password, status), 由于数据量大, 需要对以下SQL语句进行优化, 该如何进行才是最优方案:select id,username,password from tb_user where username ='itcast';答案: 针对于 username, password建立联合索引, sql为: create indexidx_user_name_pass on tb_user(username,password);这样可以避免上述的SQL语句,在查询的过程中,出现回表查询。
以上就是本期的全部内容了,加纳!
分享一张壁纸:
更多【数据库-MySQL进阶-----SQL提示与覆盖索引】相关视频教程:www.yxfzedu.com