MySQL的索引结构

php中文网
发布: 2016-06-07 15:09:39
原创
1105人浏览过

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 1.索引基础 索引是存储引擎用于快速找到记录的一种数据结构。存储引擎先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行。索引可以包含一个列或者多个列的值,如果索引包含多个列,那

欢迎进入linux社区论坛,与200万技术人员互动交流 >>进入

  1.索引基础

  索引是存储引擎用于快速找到记录的一种数据结构。存储引擎先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行。索引可以包含一个列或者多个列的值,如果索引包含多个列,那么列的顺序就会变得比较重要了。

  2.索引的优缺点

  2.1优点

  1. 提高了查询速度

  2. 减少了数据读取操作(IO)

  3. 降低排序和分组的成本(CPU)

  2.2缺点

  1. 占用了大量的存储空间

  2. insert、update和delete等操作会消耗大量的系统开销

  3索引的类型

  根据存储结构的不同,将索引分为两种:B-Tree索引和哈希索引。

  3.1B-Tree索引

  1. 平衡的多路查找树

  2. 所有的值都是按顺序存储

  3. 每一个叶子页到根的距离相同

  4. 查找过程:查找节点+节点内查找,性能等价于在键值的集合中做一次二分查找

  5. MyISAM引擎均使用B-Tree索引,InnoDB引擎使用B+Tree索引

  6. B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点开始进行搜索

  3.2Hash索引

  对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。

  在MySQL中只有Memory存储引擎显示支持哈希索引。

  4.高效的索引策略

  4.1独立的列

  1. 索引列不能是表达式的一部分,或者函数的参数

  4.2前缀索引和索引选择性

  1. 索引开始的部分字符

  2. 要选择足够长的前缀以保证较高的选择性,同时又不能太长

  4.3多列索引

  1. 在多个列上建立独立的索引并不能提高MySQL的查询性能

  2. 多个列建立一个多列索引,可以方便有AND,OR或者排序查询等操作

  4.4选择合适的索引列顺序

  1. 当不需要考虑排序和分组时,将选择性最高的列放在前面

  2. 性能不仅依赖于所有索引列的选择性,也和查询条件的具体值相关,也就是和具体值的分布相关。

  4.5聚簇索引

  4.5.1聚簇索引的主要特定:

  1. 聚簇索引不是一种单独的索引类型,而是一种数据存储方式

  2. InnoDB的聚簇索引实际上在同一个结构上保存了B-Tree索引和数据行

  3. 聚簇表示数据行和相邻的键值紧凑地存储在一起

  4. InnoDB引擎支持聚簇索引

  5. 数据文件本身即索引文件

  6. 叶子节点数据域保存的是完整的数据行

  7. InnoDB通过主键聚集数据,如果没有主键,会选择一个唯一的非空索引代替,如果没有这种索引,会隐式定义一个主键来作为聚簇索引

  8. InnoDB的二级索引中保存的不是指向行的物理位置的指针,而是行的主键值

[1] [2] 

MySQL的索引结构

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号