前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 为什么要使用索引及索引创建的原则有哪些?

MySQL 为什么要使用索引及索引创建的原则有哪些?

作者头像
AI码师
发布2022-12-22 10:20:40
3950
发布2022-12-22 10:20:40
举报

B站搜索“乐哥聊编程“有本篇文章配套视频‍ https://www.bilibili.com/video/BV1se4y1t7fx

什么是索引

索引也是一种排好序的数据结构,它记录了原数据的单个列或多个列,通过索引查询,程序不需要查所有记录,只需要先按照索引查到具体的数据,然后在根据索引记录的指针位置,找到对应的原始数据记录。举个例子来说,索引就好比是我们书本的目录,我们通过目录能够快速定位到我们想看指定章节的页数,如果我们不适用索引,会是什么情况呢?我们最大可能就是从头往后方,一页一页确认去找。

为什么创建索引

因为索引在一定程度上,提高了数据库查询速度 在MySQL中有两种数据访问方式:顺序访问和索引访问。

顺序访问

顺序访问又叫全表扫描,也就是你要查数据时,它是从表的第一行一直按照你的条件进行匹配,直到最后一行,如果数据量比较少的情况下,这是没有问题,但是如果数据量很多,这种查询方式就有点够呛了,前端请求一个数据,直接把网站给干挂了。

索引访问

索引访问顾名思义就是我们在查询数据是在索引数据结构上执行的,索引数据首先是排好序的,其次他没有保存完整的数据列(聚集索引除外,它的完整记录是放在叶子节点中的) 这种访问方式前提是你已经建好索引,并且你检索的数据列存在索引表中,只有这样你才可以使用索引查询。如果创建了索引之后,当我们对数据进行更新操作时,需要同时更新和维护索引数据。

哪些情况下需要创建索引

  • 选择唯一性索引:唯一性索引的值是唯一的,可以更快速的通过索引来确定某条记录
  • 为经常需要排序、分组和联合操作的字段建立索引
  • 经常作为查询条件的字段建立索引
  • 尽量使用数据量少的索引,如果索引的值很长,那么查询的速度会受到影响
  • 尽量使用前缀来作为索引
  • 尽量选择区分度高的列作为索引,区分度高是指字段不重复的列,比如不要给性别或状态等列建立索引
  • 尽量的扩展索引,而不是新建索引
  • 在需要排序的字段上面建立索引
  • 在where子句中的字段建立联合索引
  • 联表查询时,要给关联字段创建索引

哪些情况下不建议创建索引

  • 重复度比较高的列不要设置索引
  • 对于定义为text,image,bit类型的列不要建索引
  • 如果数据列经常被修
  • 数据量小的表不要建索引,也许全表扫性能会更高
  • 不建议对无序的字段建立索引,如UUID(以前好像经常用,现在不怎么用了)
  • 不要对一个字段建立多个联合索引

索引优缺点

优点

  • 可以通过唯一索引保证数据唯一性
  • 加快数据的查询速度
  • 可以加速表和表的连接
  • 在查询过程中使用索引,还会触发mysql隐藏的优化器,提高查询性能

缺点

  • 索引的创建和维护需要消耗时间,并且还占据一部分额外的空间,并且随着数据量增大,索引占用的空间也会增大(但是和显著提升的性能来说,这也不算啥)
  • 当对表数据进行更新和删除时,需要同时维护索引记录,降低了数据的维护速度,有可能会出现数据更新了,但是索引没更新上(这种情况概率比较小)

总结

所以在创建索引时,我们要综合考虑索引优缺点和创建索引的规则(哪些该创建索引,哪些不该创建索引)。不能一味的为了创建索引而创建索引。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐哥聊编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是索引
  • 为什么创建索引
    • 顺序访问
      • 索引访问
      • 哪些情况下需要创建索引
      • 哪些情况下不建议创建索引
      • 索引优缺点
        • 优点
          • 缺点
          • 总结
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档