MySQL索引详解,这一篇绝对够 上
MySQL索引
1.什么是MySQL索引
索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于c语言的链表通过指针指向数据记录的内存地址)。
使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。
索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容。
索引是表中一列或者若干列值排序的方法。
建立索引的目的是加快对表中记录的查找或排序。
2.索引的作用
设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建所有的最主要的原因。
当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。
可以降低数据库的Io成本,并且索引还可以降低数据库的排序成本。
通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。
可以加快表与表之间的连接。
在使用分组和排序时,可大大减少分组和排序的时间。
3.索引的副作用
索引需要占用额外的磁盘空间。
对于MyISAM引擎而言,索引文件和数据文件是分离的,索引文件用于保存数据记录的地址。而InnoDB 引擎的表数据文件本身就是索引文件。
在插入和修改数据时要花费更多的时间,因为索引也要随之变动。
4.创建索引的原则依据
索引随可以提升数据库查询的速度,但并不是任何情况下都适合创建索引。因为索引本身会消耗系统资源,在有索引的情况下,数据库会先进行索引查询,然后定位到具体的数据行,如果索引使用不当,反而会增加数据库的负担。
表的主键、外键必须有索引。因为主键具有唯一性,外键关联的是主表的主键,查询时可以快速定位。
记录数超过300行的表应该有索引。如果没有索引,每次查询都需要把表遍历一遍,会严重影响数据库的性能。
经常与其他表进行连接的表,在连接字段上应该建立索引。
唯一性太差的字段不适合建立索引。
更新太频繁地字段不适合创建索引。
经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。
在经常进行GROUP BY、ORDER BY的字段上建立索引;
索引应该建在选择性高的字段上。
索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。
相关文章
- 数据孤岛是业务效率的无声杀手
- 2023展望:新的一年将给大数据分析领域带来什么?
- 阿里云ADB基于Hudi构建Lakehouse的实践
- 大数据在医疗保健领域的使用案例
- 微软增加说明:KB5021751 更新扫描已经 / 即将过时 Office 过程中不会触碰用户隐私
- 2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选
- 场景化、重实操,分享一个实时数仓实践案例
- Arctic的湖仓一体践行之路
- 分布式计算MapReduce究竟是怎么一回事?
- 淘系数据模型治理优秀实践
- 大数据分析对医疗保健的影响
- 当我们说大数据Hadoop,究竟在说什么?
- 2022年及以后大数据的五个发展趋势
- 网易严选离线数仓治理实践
- 2023 年数据治理趋势
- 一份“靠谱”的年度经营计划,你学会了吗?
- 漫谈对大数据的思考
- 测试一下,读懂数据的能力,你有吗?
- 用艺术的眼光探索数据之美
- 聊聊数据分析成果如何落地