MySQL支持的索引类型

B-tree索引的特点

1、B-tree索引以B+树的结构存储数据

2、B-tree索引能够加快数据的查询速度

3、B-tree索引更适合进行行范围查找

B-tree结构图

在什么情况下可以用到B树索引?

1、全值匹配的查询

例如我们有个订单号,订单号为 order_sn='98764322119900'

2、匹配最左前缀的查询

3、匹配列前缀查询

例如:order_sn like '9876%'

4、匹配范围值的查找

例如:order_sn > '98764322119900' and order_sn < '98764322119999'

5、精确匹配左前列并范围匹配另外一列

6、只访问索引的查询

Btree索引的使用限制

1、如果不是按着索引最左列开始查找,则无法使用索引

2、使用索引时不能跳过索引中的列

3、Not in 和 <> 操作无法使用索引

4、如果查询中有某个列的查询范围,则其右边所有列都无法使用索引

Hash索引的特点

1、Hash索引是基于Hash表实现的,只有查询条件精确匹配Hash索引中的所有列时,才能够使用到hash索引

2、对于Hash索引中的所有列,存储引擎都会为每一行计算一个Hash码,Hash索引中存储的就是Hash码

Hash索引的限制

1、使用hash索引需要二次查找

2、Hash索引无法用于排序

3、Hash索引不支持部分索引查找也不支持范围查找

为什么要使用索引?

1、索引大大减少了存储引擎需要扫描的数据量

2、索引可以帮助我们进行排序以比喵使用临时表的IO消耗,提升MySQL的能力

3、索引可以把随机I/O变为顺序I/O

索引是不是越多越好?

场景:开发人员要求来创建更多的索引,问:“为何要添加更多的索引?”,答:”因为导入速度的时候很慢,以此来加快导入的速度!!!“,so..开发人员对索引的理解不是那么的透彻,虽然索引能够为查找带来速度上的提升,但是也会对性能有一些损失,衡量标准,当创建索引带来的好处多过于消耗的时候,才是最优的选择~

1、索引会增加写操作的成本

2、太多的索引会增加查询优化器的选择时间

索引的优化策略

索引列上不能使用表达式或函数

上图中的第一个select语句中使用表达式,因此不满足创建索引的要求,改为第二个select语句即可

前缀索引和索引列的选择性

联合索引

如何选择索引列的顺序

1、经常会被使用到的列优先

2、选择性高的列优先

覆盖索引

优点:

1、可以优化缓存,减少磁盘IO操作

2、可以减少随机IO,使随机IO操作变为顺序IO操作

3、可以避免对Innodb主键索引的二次查询

4、可以避免MyISAM表进行系统调用

无法使用覆盖索引的情况

1、存储引擎不支持覆盖索引

2、查询中使用了太多的列

3、使用了双%号的like查询

使用索引优化查询

使用索引扫描来优化排序

通过排序操作

按着索引顺序扫描数据

注意事项:

1、索引的列顺序和order by子句的顺序完全一致

2、索引中所有列的方向(升序,降序)和order by子句完全一样

3、order by中的字段全部在关联表中的第一张表中

利用索引优化

mysql 更新索引_MySQL索引优化相关推荐

  1. 读薄《高性能MySql》(三)索引优化

    读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...

  2. mysql字段简索引_Mysql索引优化攻略(全)

    所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找.而用的最多,并且是mysql默认的就是二叉树算法 BTREE, ...

  3. mysql or 创建索引_Mysql索引优化

    1.单表索引优化 单表索引优化分析 创建表 建表 SQL CREATE TABLE IF NOT EXISTS article( id INT(10) UNSIGNED NOT NULL PRIMAR ...

  4. mysql存储引擎 索引优化_MySQL存储引擎,索引及基本优化策略

    存储引擎 与Oracle, SQL Server这些数据库不同,MySQL提供了多种存储引擎.什么是存储引擎?存储引擎其实就是一套对于数据如何存储,查询,更新,建立索引等接口的实现.不同存储引擎特性有 ...

  5. mysql locate索引_MYSQL索引优化

    1.查看sql的执行频率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息.show [session|global] stat ...

  6. mysql索引优化有几种_mysql索引优化

    索引类型 从物理存储角度上,索引可以分为聚集索引和非聚集索引. 1.聚集索引(Clustered Index) 聚集索引决定数据在磁盘上的物理排序,一个表只能有一个聚集索引. 2.非聚集索引(Non- ...

  7. mysql order by 多个字段 索引_mysql 索引优化order by 语句

    MySql创建索引时支持ASC或DESC排序. 下面举例 创建表时同时创建索引降序排序(sname 字段上普通索引降序) create table tbl1 ( id int unique, snam ...

  8. mysql索引两个表_MySQL索引优化(索引两表优化案例)

    建表SQL CREATE TABLE IF NOT EXISTS `class` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT ...

  9. MYSQL高级篇-----索引优化分析

    索引优化分析 下面是目录可跳转对应页面学习: 2. 索引优化分析 2.1 原因 SQL执行顺序 2.2 常见通用的join查询 2.3 索引 2.3.1 索引分类(重点) 2.3.2 索引结构 2.3 ...

最新文章

  1. python 保存内容到记事本里面
  2. 《Adobe Fireworks CS6中文版经典教程》——1.5使用多个文档
  3. 【杂谈】有三AI的一对一永久技术答疑服务,我们至少不会跑路
  4. VTK:Utilities之ShareCamera
  5. Typesafe公司正式更名为Lightbend公司
  6. 什么是大数据,怎么理解和应对大数据时代
  7. 面向对象之多态,魔法函数
  8. 更新项目java_java – 什么是Maven – 更新项目?
  9. bzoj 4826: [Hnoi2017]影魔
  10. SHELL中获取函数返回值
  11. 手把手教你搭建Android开发环境
  12. Oracle JRE 7 Update 51 (64 bit) or higher is required forPolybase failed解决办法
  13. Android Studio ADB 环境变量配置
  14. 华为转正答辩ppt范文_华为新员工转正答辩
  15. 基于html5的城市公交查询系统,本科毕业论文 城市公交查询系统
  16. React Native入门——布局实践:开发京东客户端首页(一
  17. t-sql 中实现循环处理
  18. windows双击运行python脚本_Python脚本不能通过双击Windows来执行
  19. 球差产生的原因、定量分析和校正方法(zemax)
  20. java白皮书是什么_ABEL 更新白皮书,对我们意味着什么?

热门文章

  1. SAP Fiori : Response from creating in local store
  2. how is abap.js being loaded
  3. Backbone - create model的实现原理
  4. Cloud for Customer mobile应用里pass Code登录界面的绘制原理
  5. 继承的CSS类在Chrome开发者工具里的显示
  6. SAP CRM呼叫中心的轮询设置CRMCMP_IC_FRAME SAM queue receiver
  7. 蒙牛 customer Project Support - 同时更新两个database table
  8. TCP请求发送和接收,如果接收端终止,发送端继续发送会出什么错
  9. 如何把Kubernetes config view里的base64编码过后的secret信息还原
  10. 腾讯AI开放平台的接口调用指南