MySQL日记——索引优化
来源:互联网 发布:sybase删除表字段sql 编辑:程序博客网 时间:2024/05/21 10:16
索引优化最简单的一个法则
左连接建在右表,右连接建在左表
例如
select * from book left join category on category.class=book.class
这时应该使用下述SQL语句把索引建在category.class
create index on category z(class)
又如
select * from book right join category on category.class=book.class
这时应该使用下述SQL语句把索引建在book.class
create index on book z(class)
Join优化几个基本准则
- 尽量减少Join语句中的NestLoop的循环总次数:“永远用小结果集驱动大结果集”
- 优化先优化NestLoop的内层循环
- 保证Join语句被驱动表上Join条件字段已经被索引
- 当无法保证被驱动表的Join条件字段被检索 且内存资源充足的前提下,不要太吝啬JoinBuffer的设置
避免索引失效
- 最好使用全值匹配(索引都用在where后作为条件)
- 最佳左前缀法则(指的是从索引的左前列开始并且不跳过索引的列)
- 不要在索引上做任何操作(计算,函数,类型转换),会导致索引失效而转向全表扫描
- 储存引擎不能使用索引中范围条件右边的列(用了>,<,like等右边的索引全部失效)
- 尽量使用覆盖索引(只访问索引的查询),减少select*
- mysql在使用不等于(!=或<>)的时候无法使用索引会导致全表扫描
- is null,is not null也无法使用索引
- like以通配符开头(’%abc….’)mysql索引失效会变成全表扫描的操作(%尽量放在右边,要使用%开头则要使用覆盖索引)
- 字符串不加单引号索引失效
- 少用or,用它来连接时会索引失效
一般性建议
1. 对于单键索引,尽量选择针对当前query过滤性更好的索引2. 在选择组合索引的时候,当前的query中过滤性最好的字段在索引字段顺序中,位置越靠左越好3. 在选择组合索引的时候,尽量选择可以包含当前query中的where子句中更多字段的索引4. 尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的
优化总结口诀
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
Like百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用;
VAR引号不可丢,SQL高级也不难;
0 0
- MySQL日记——索引优化
- MySQL索引优化——覆盖索引
- MySQL优化——索引
- MySQL—索引与优化
- MySQL—索引与优化
- MySQL—索引与优化
- mysql优化——索引优化
- MySQL日记——查询优化
- MySQL日记——索引的介绍和使用
- MySQL数据库优化(四)——MySQL索引优化
- mysql优化索引 —— Using filesort
- 理解MySQL——索引与优化
- 理解MySQL——索引与优化
- 理解MySQL——索引与优化
- 理解MySQL——索引与优化
- 理解MySQL——索引与优化
- 理解MySQL——索引与优化
- 理解MySQL——索引与优化
- 【DP+KMP+矩阵乘法】BZOJ1009(HNOI2008)[GT考试]题解
- UVa 10132
- 浅谈SVM(五)
- Qt:QML静态编译大坑之import用法
- 结构型模式总结
- MySQL日记——索引优化
- 改变iOS app的icon(iOS10.3)
- 关于WGS84,GCJ02和BD09坐标在QT下的互相转换
- Vim的基本按键功能与快捷键(不含插件及自定义快捷键)
- 请描述一下 cookies,sessionStorage 和 localStorage 的区别?
- 工厂模式
- 如何在ideal上面搭建resin
- C++杂记2
- 操作系统原理读书笔记之进程同步