博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql索引总结
阅读量:7074 次
发布时间:2019-06-28

本文共 875 字,大约阅读时间需要 2 分钟。

      索引是一种用于快速查询的数据结构,不同的存储引擎使用不同的索引。由于索引文件很大,索引一般存储在磁盘上,所以影响索引速度的关键因素为磁盘IO次数,越少越快。

优点

  • 加快查询速度
  • 唯一索引,保证数据的唯一性
  • 进行分组、排序查找时,性能显著

缺点

  • 索引占用磁盘空间
  • 对数据进行增、删、改时,都需要维护索引数据

索引结构

B树索引(变异版二叉树结构)

  • 查询从根节点开始,无需全表扫描,节省时间
  • 叶节点按顺序排列,适合顺序查找、范围查找
  • 将随机IO转化成顺序IO

      限制

  • 索引查找时,顺序必须从最左侧开始,否则索引无效
  • 不能跳过索引的列
  • 如果某一列使用like查询,其右侧字段均无法使用索引优化查询

哈希索引(索引值生成哈希值,按哈希值排序)

  • 索引每一行包含哈希值(索引列生成唯一值)、指向数据的指针

       限制

  • 因为按照哈希值匹配,所以只能精确匹配所有索引字段,然后根据指针找到对应行数据

索引物理存储

存储方式分为聚簇索引与非聚簇索引。聚簇索引表示索引与表数据存放在一起。innoDB与MyISAM虽然都说过B+结构,但是实现方式不同。

InnoDB

  • 聚集索引表示叶子节点包含主键值以及行数据,主要用在innoDB
  • innoDB数据文件就是索引文件,key为主键称为主索引innoDBinnoDB
  • 辅助索引时,叶子节点保存辅助索引以及主键值,与聚集索引的不同时,需要根据主键进行二次查询,相对效率变低
  • 当存在主键时,默认创建聚集索引,一个表有且仅有一个;不存在则以第一个唯一值键为主键,否则创建一个rowid作为主键,rowid为不可见。

MyISAM

  • MyISAM索引保存与InnoDB不同,索引与行数据分离保存,索引中包含索引值以及数据指针

索引类型

  • 主键索引
  • 单列索引
  • 唯一索引,可用来保证数据的唯一性
  • 组合索引,需满足最左前缀原则

总结

  • 尽量少使用单行索引,尽量使用覆盖索引(索引包含所需所有数据),避免二次查询,节省时间
  • 尽量按照顺序的范围查找,顺序IO比随机IO速度快
  • 索引列不能表达式的一部分,也不能是函数的参数
  • 某列范围查询,则其后所有列索引无效

转载地址:http://qluml.baihongyu.com/

你可能感兴趣的文章
ntp同步两台机器的时间
查看>>
我的友情链接
查看>>
Office365管理员操作手册-1
查看>>
Mysql学习总结(7)——MySql索引原理与使用大全
查看>>
电脑端下载今日头条的短视频
查看>>
新浪微博数据爬取
查看>>
Tile chart
查看>>
我的友情链接
查看>>
php---编译安装 PHP 的 Redis 扩展
查看>>
python ---- urllib2
查看>>
Windows的定时任务(Schedule Task)设置
查看>>
rndc: connect failed: 127.0.0.1#953: connection refused
查看>>
在论坛中出现的比较难的sql问题:12(递归问题2)
查看>>
PXE结合kiskstart实现自动化安装系统
查看>>
Mysql isam数据库恢复实战
查看>>
mysql LINESTRING ,POINT 类型操作
查看>>
centos7 双网卡双ip内外网设置最小化安装
查看>>
第十次课作业(风险管理、项目收尾、知识产权)
查看>>
如果在ecshop中自定义添加模板
查看>>
win10系统 VMWare12.5虚拟机 Ubuntu 16.04 LTS 开始我的Linux学习
查看>>