索引优化最简单的一个法则

左连接建在右表,右连接建在左表
例如

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优化几个基本准则

  1. 尽量减少Join语句中的NestLoop的循环总次数:“永远用小结果集驱动大结果集”
  2. 优化先优化NestLoop的内层循环
  3. 保证Join语句被驱动表上Join条件字段已经被索引
  4. 当无法保证被驱动表的Join条件字段被检索 且内存资源充足的前提下,不要太吝啬JoinBuffer的设置

避免索引失效

  1. 最好使用全值匹配(索引都用在where后作为条件)
  2. 最佳左前缀法则(指的是从索引的左前列开始并且不跳过索引的列)
  3. 不要在索引上做任何操作(计算,函数,类型转换),会导致索引失效而转向全表扫描
  4. 储存引擎不能使用索引中范围条件右边的列(用了>,<,like等右边的索引全部失效)
  5. 尽量使用覆盖索引(只访问索引的查询),减少select*
  6. mysql在使用不等于(!=或<>)的时候无法使用索引会导致全表扫描
  7. is null,is not null也无法使用索引
  8. like以通配符开头(’%abc….’)mysql索引失效会变成全表扫描的操作(%尽量放在右边,要使用%开头则要使用覆盖索引)
  9. 字符串不加单引号索引失效
  10. 少用or,用它来连接时会索引失效

一般性建议

1. 对于单键索引,尽量选择针对当前query过滤性更好的索引
2. 在选择组合索引的时候,当前的query中过滤性最好的字段在索引字段顺序中,位置越靠左越好
3. 在选择组合索引的时候,尽量选择可以包含当前query中的where子句中更多字段的索引
4. 尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的

优化总结口诀

全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
Like百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用;
VAR引号不可丢,SQL高级也不难;

MySQL日记——索引优化相关推荐

  1. 知识点:Mysql 数据库索引优化实战(4)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...

  2. Mysql之索引优化案例

    Mysql之索引优化案例 1.单表简单案例 1.1创建表 1.2 问题: 1.3 解决:新建索引 1.4 再次执行 2.双表简单案例 2.1创建表并插入数据 2.2 由于是LEFT JOIN,所以左表 ...

  3. MySQL - 践行索引优化

    文章目录 生猛干货 Pre Table Demo DB Version Case 全值匹配 最左前缀 禁止索引列上做任何操作(计算.函数.(自动or手动)类型转换) 存储引擎不能使用索引中范围条件右边 ...

  4. mysql 字符串索引 优化_MySQL性能优化之索引调优实战

    索引失效场景或使用注意事项 a.索引无法存储null值,所以建议都给默认值 b.如果条件中有or,即使使用了索引条件也不起作用,所以尽量少用or 如果想使用or,又让索引生效,只能将or的每个列上加上 ...

  5. Mysql高级 索引优化

    Mysql逻辑架构 Mysql与其他数据库相比有点与众不同,他的架构可以在多种不同的场景中应用并发挥作用,主要体现在存储引擎的架构上,插件式的存储引擎结构将查询处理和其他的系统任务以及数据的存储提取分 ...

  6. mysql复合索引优化

    很多时候,我们在mysql中创建了索引,但是某些查询还是很慢,根本就没有使用到索引! 一般来说,可能是某些字段没有创建索引,或者是组合索引中字段的顺序与查询语句中字段的顺序不符. 看下面的例子: 假设 ...

  7. MySQL:索引优化、查询优化

    一.哪些情况适合创建索引 1.字段的数值有唯一性的限制: 业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引: 说明:创建唯一索引会影响添加的速度(在添加的时候会维护索引),但是这个速度影响 ...

  8. MySQL高级-索引优化(超详细)

    性能分析 MySQL Query Optimizer Mysql中由专门负责优化SELECT语句的优化器,主要功能就是通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计 ...

  9. 【MySQL】索引优化中的最左前缀原则和索引下推

    目录 一.引入 二.覆盖索引 ​ 讲接下来的问题前首先讲一下联合索引的底层存储结构长什么样?联合索引的检索过程是什么样的呢? 三.最左前缀原则 最左前缀原则的定义 四.索引下推 五.小结 一.引入 在 ...

最新文章

  1. 矩阵快速幂的一份小结
  2. Shell语法—— while 条件语句
  3. 你知道group by的工作原理和优化思路吗?
  4. BLE - LINK LAYER SPECIFICATION
  5. java中的控制执行流程
  6. 运行通达信行情接口软件的电脑需要什么配置?
  7. vb从入门到精通_干货|让你 ArcGIS Engine从入门到精通的22个视频
  8. 2021-05-20
  9. oracle拆分分区语法详解大全_Oracle分区表详解
  10. php中thead怎么居中,html thead标签怎么用
  11. iOS 5 故事板入门(2)
  12. bzoj3039 玉蟾宫
  13. 0.96OLED图标取模,包括信号图标,蓝牙图标,闹钟,电池
  14. 浏览器工作流程_浏览器如何工作
  15. 单片机c语言数码管程序,51单片机C语言程序(三)数码管
  16. 天龙八部手游服务器维护公告,【已完成】安卓版本更新维护公告
  17. 互联网大脑的情绪,智商和梦境-互联网神经学系列第四篇
  18. 猿创征文|一文吃透JAVA初学者的开发工具
  19. 如何从100万个数中找出最大的前100个数
  20. 让FLASH动画轻松转换成GIF动画

热门文章

  1. DNSPod十问巩书凯:制造业小工厂上云是个伪需求吗?
  2. 如何给自己的nginx服务设置管理密码
  3. 2019前端面试准备
  4. STM32-GPIO介绍
  5. mysql安全性_如何提高mysql的安全性
  6. January 11th Monday 2010
  7. 通关GO语言19 性能优化:Go 语言如何进行代码检查和优化?
  8. Moonbeam社区论坛:一个致力于社区讨论、提案、和反馈的空间
  9. 高数 | 定积分的应用 柱壳法 圆柱法
  10. 【2020年中总结】一篇文章汇集国内各大IoT云平台生态,阿里物联网/小米平台/腾讯平台/京东小京鱼平台,总有一个适合你;