什么是单表优化?
单表优化是指针对一张查询表,在执行查询语句时的查询效率改进。
它和双表优化、三表优化的区别
区别是表数量的不同,在优化方法方面是完全相同的。
代码实例
- 数据准备
建表
![90f6094d8af05daa97f966a536a5db1a.png](https://img-blog.csdnimg.cn/img_convert/90f6094d8af05daa97f966a536a5db1a.png)
![db4f364e15cd05673f2de08bae6b376e.png](https://img-blog.csdnimg.cn/img_convert/db4f364e15cd05673f2de08bae6b376e.png)
![f34f2f5b2f1eaa1db51cfcb2940fda94.png](https://img-blog.csdnimg.cn/img_convert/f34f2f5b2f1eaa1db51cfcb2940fda94.png)
- 目的
改进查询语句效率。通过执行查询 authorid=1 且 typeid 为 2 或 3 的 bid 。
- 如何改进
改进的方法有 3 步:
- 加索引
执行结果:查询类型改进为索引。
![5e9798a64a35cf9123ff4226c307bad7.png](https://img-blog.csdnimg.cn/img_convert/5e9798a64a35cf9123ff4226c307bad7.png)
- 调整索引的顺序,让 select 后面的列放在索引最后,where 语句后面的列放在最前面。
alter table book add index idx_tab (typeid, authorid, bid)
升级了新的索引,需要将之前废弃的索引删掉,防止干扰。
执行结果:额外信息中去掉了 using filesort 。
![cda6fb7b695f7c5eada7ecfe23488571.png](https://img-blog.csdnimg.cn/img_convert/cda6fb7b695f7c5eada7ecfe23488571.png)
- 语句中有 in 关键字,因为 in 有可能会失效,因此将有可能失效的 in 放在语句的最后执行。type 类型升级为 ref 。
![a371a7403cea5c60e32e2392e70eed78.png](https://img-blog.csdnimg.cn/img_convert/a371a7403cea5c60e32e2392e70eed78.png)
- 总结:
保持索引定义和使用的顺序一致性, 可以提高查询效率。
索引覆盖专业名词叫最佳左前缀