美文网首页
MySQL索引相关原则

MySQL索引相关原则

作者: 有点蒙圈 | 来源:发表于2021-05-10 11:45 被阅读0次

索引创建原则

模糊查询请最好遵守最左前缀查询原则。

a.mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配。

b.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

c.综合a b补充:停止匹配并不代表范围查询后面的字段就无法使用索引了。比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整

避免为"大字段"建立索引

就是尽量使用数据量小的字段作为索引。因为MySQL在维护索引的时候是会将字段值一起维护的,那这样必然会导致索引占用更多的空间,另外在排序的时候需要花费更多的时间去对比。

选择区分度大的列作为索引

a.因为MySQL他还有一个查询优化器,查询优化器发现某个值出现在表的数据行中的百分比很高的时候,它一般会忽略索引,进行全表扫描。惯用的百分比界线是"30%"。

b.SELECT COUNT(DISTINCT last_name)/COUNT(*)FROM people;进行计算辨识度,一般来讲0.846即可

尽量为ORDER BY 和 GROUP BY 后面的字段建立索引

a.将 Order By后面的字段建立索引,这样在查询的时候就不需要再去做一次排序了,因为我们都已经知道了建立索引之后在B+树中的记录都是排序好的。

b.因为在GROUP BY 的时候也要先根据 GROUP BY 后面的字段排序,然后在执行聚合操作。如果 GROUP BY 后面的字段没有排序,那么这个时候MySQL是需要先进行排序的,这样就会产生临时表,一个排好序的临时表,然后再在临时表中执行聚合操作,这样子当然效率很低了,如果 GROUP BY 后面的字段已经建立了索引,那么MySQL 就不需要再去排序,也就不会产生临时表。

c.如果 GROUP BY的列和 ORDER BY的列不一样,即使都有索引也会产生临时表.

不要在条件中使用函数

a.如果是已经建立好的索引的字段在使用的时候执行了函数操作,那么这个索引就使用不到了。因为MySQL为该索引维护的B+树就是基于该字段原始数据的,如果正在使用过程中加了函数,MySQL就不会认为这个是原来的字段,那肯定不会走索引了。比如:from_unixtime(create_time) = ’2014-05-29’就应该改成create_time = unix_timestamp(’2014-05-29’)。

b.如果存在确实要使用函数的情况,可以直接对函数增加所以

不要建立太多的索引

因为MySQL维护索引是需要空间和耗费性能的,MySQL会为每个索引字段维护一颗B+树。

频繁增删改的字段不要建立索引

字段的变化MySQL是需要重新维护索引的。

索引失效的常见场景

1.使用 OR 关键字会导致索引失效,不过如果要想使用OR 又不想让索引失效,那就得需要为or条件中的每个列都建立索引。这很显然是和上面的不要建立太多的索引相违背。

2.联合索引如果不遵循最左前缀原则,那么索引也将失效

3.使用模糊查询的时候以%开头也会导致索引失效

4.索引列如果使用了隐式转换也会导致索引失效

示例:

假设字段 age 类型为 int,那我们一般是这么查询的

SELECT * FROM student WHERE age=15

上面这种情况是能使用到索引的,但是如果你这么写

SELECT * FROM student WHERE age='15'

那这种情况是使用不到索引的,也就是age列情的索引是失效的

参考原文:https://juejin.cn/post/6960470472077082638?utm_source=gold_browser_extension

相关文章

  • MySQL索引相关原则

    索引创建原则 模糊查询请最好遵守最左前缀查询原则。 a.mysql会一直向右匹配直到遇到范围查询(>、<、betw...

  • 大厂面试系列(八):数据库mysql相关

    数据库相关 mysql索引的数据结构,加索引的原则 InnoDB和myiasm的区别,以及常见的mysql优化方案...

  • 5.2MySQL创建高性能索引考察点

    MySQL索引的基础和类型延伸:MySQL索引的创建原则延伸:MySQL索引的注意事项 索引的基础索引类似于书籍的...

  • 索引

    这道题目考察的知识点是MySQL组合索引(复合索引)的最左优先原则。 最左前缀匹配原则 在mysql建立联合索引时...

  • Mysql索引失效

    mysql 索引失效的原因有哪些?Mysql索引失效的原因 1、最佳左前缀原则——如果索引了多列,要遵守最左前缀原...

  • mysql索引相关

    创建、修改、删除索引CREATE INDEX index_name ON table_name (column_l...

  • mysql索引相关

    起因 上周做完实习公司项目的新功能后,交给头儿进行code review。其中在使用yii框架的orm进行数据库查...

  • Mysql索引相关

    此文章主要回答以下问题:1 、索引数据结构演变2 、mysql索引数据结构 mysql索引的演变 线性结构:首先不...

  • mysql索引相关

    转自:https://blog.csdn.net/wuseyukui/article/details/723125...

  • mysql索引相关

    MySQL索引原理 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需...

网友评论

      本文标题:MySQL索引相关原则

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