美文网首页
哪些情况下不适合创建索引?

哪些情况下不适合创建索引?

作者: zzz_0427 | 来源:发表于2024-07-07 14:54 被阅读0次
01、在 where 中使用不到的字段,不要设置索引

where 条件(包括 group by、order by)里用不到的字段不需要创建索引,索引的价值是快速定位,如果起不到定位的字段通常是无需创建索引的。

02、数据量小的表最好不要使用索引

如果表里记录的数据太少,比如少于 1000 个,那么是不需要创建索引的。表记录太少的话,是否创建索引对查询效率的影响是并不大的。甚至说,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。

03、有大量重复数据的列上不要建立索引

在条件表达式中,建议给经常用到的不同值较多的列上建立索引,但是字段中如果有大量重复数据,也不用建立索引。
比如:在学生表的 “性别” 字段上只有 <男><女> 两个不同的值,所以无需建立索引。如果建立索引,不但不会提高查询效率,反而会严重降低数据的更新速度。
如果要在 100w 行数据中查找其中的 50w 行(性别为男的数据),一旦创建了索引,就需要先访问 50w 次索引,然后再访问 50w 次数据表,这样加起来的开销比不适用索引可能还要大。

04、避免对经常更新的表创建过多的索引

第一层含义:频繁更新的字段不一定要创建索引。因为更新数据的时候也需要更新索引,如果索引太多,在更新索引的时候也会造成负担,从而影响效率。

第二层含义:避免对经常更新的表创建过多的索引,并且索引中
的列尽可能少。此时,虽然提高了查询速度,同时却会降低更新表的速度。

05、不建议用无序的值作为索引

例如身份证、UUID(在索引比较时需要转为 ASCII,并且插入时可能造成页分裂)、MD5、HASH、无序长字符串等。

06、删除不再使用或者很少使用的索引

表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引将它们删除,从而减少索引对更新操作的影响。

07、不要定义冗余或重复的索引

① 冗余索引
例如:通过 idx_name_birthday_phone_number 索引就可以对 name 列进行快速搜索,再创建一个专门针对 name 列的索引就算是一个冗余索引,维护这个索引只会增加维护的成本,并不会对搜索有什么好处。
② 重复索引
例如:col1 既是主键、又给它定义为一个唯一索引,还给它定义了一个普通索引,可是主键本身就
会生成聚簇索引,所以定义的唯一索引和普通索引是重复的,这种情况要避免。

相关文章

  • 面试测试开发被问到数据库索引不知道怎么办?这篇文章告诉你

    提出的问题 什么情况下创建索引,什么时候不需要索引? 索引的种类有哪些? 什么是索引 索引就是帮助数据库管理系统高...

  • 数据库优化----索引

    索引 优缺点 作为索引的字段要求 不适合创建索引场景 什么字段可以适合创建索引 注意 参考优化文章

  • Mysql面试题

    文章目录 MySQL 索引使用有哪些注意事项呢?索引哪些情况会失效索引不适合哪些场景 MySQL 遇到过死锁问题吗...

  • MySQL 哪些表不适合创建索引

    哪些表不适合创建索引 记录太少的表 经常增删改查的表。 索引提高了查询速度,同时却会降低更新表的速度,如对表进行I...

  • 51-MySQL-索引的设计原则

    一、高效索引 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。索引设计不...

  • 建立索引的原则(DBA运维规范)

    8.1.0 说明 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。 那么...

  • 数据库创建索引优缺点

    为什么要创建索引? 创建索引可以提高系统的性能。 创建索引的优点有哪些? 1.通过创建唯一性索引,可以保证数据库表...

  • MySQL索引失效

    哪些情况需要创建索引 主键自动建立唯一索引频繁作为查询条件的字段应该创建索引多表关联查询中,关联字段应该创建索引 ...

  • MySQL ORDER BY是如何执行的

    本文问题 order by是否可以使用索引,在什么情况下使用索引? 在哪些情况下,order by无法使用索引执行...

  • Mysql note

    1、哪些字段适合加索引 经常被查询的字段 字段长度太长不适合建立索引 经常更新的字段不适合建立索引,因为更新还会更...

网友评论

      本文标题:哪些情况下不适合创建索引?

      本文链接:https://www.haomeiwen.com/subject/wcnicjtx.html