MySQL索引实战总结

作者: JavaQ | 来源:发表于2017-09-03 21:44 被阅读182次

MySQL索引对数据检索的性能至关重要,盲目的增加索引不仅不能带来性能的提升,反而会消耗更多的额外资源,本篇总结了一些MySQL索引实战经验。

索引是用于快速查找记录的一种数据结构。索引就像是数据库中数据的目录,数据库在查询时,首先在索引中找到匹配的值,然后根据这个匹配值找到对应的数据行。

概念解释

聚簇索引

聚簇索引的顺序就是数据的物理存储顺序,索引中数据域存储的就是实际的数据,一个表最多只能有一个聚簇索引,适用于查询多行数据,不适用于频繁修改的列,一般在主键上创建。

非聚簇索引

索引顺序与数据物理排列顺序无关,索引中存储的内容为实际数据的地址,适应于查询单行数据。

普通索引

即平时创建的普通索引。

唯一索引

索引所在的列或列组合的值是全表唯一的。

全文索引

MySQL从3.23.23版开始支持全文索引,它查找的是文中的关键词,而不是直接比较索引中的值。

单列索引

在单列上创建的索引。

组合索引

在多个列上创建的索引。

最左前缀查找

where子句中有a、b、c三个查询条件,创建一个组合索引abc(a,b,c),最左前缀的概念是说以组合索引最左边的列a组合成的查询条件,如(a,b,c)、(a,b)、(a,c),这三种情况的查询条件都会使用abc索引,和where子句中a、b、c出现的顺序没关系,可以是where c=? and b=? and a=?,但(b,c)组合不会使用索引,即where c=? and b=?。

哪些列适合创建索引

1.经常作为查询条件的列;
2.经常作为排序条件的列;
3.经常作为join条件的列;
4.经常被查询的列。

哪些列不适合创建索引

1.数据频繁被修改的列,数据被修改,索引需要做相应的修改,消耗资源;
2.区分度不是很高的列,如性别,列值重复性太大,索引效果不是很明显;
3.不是经常被作为查询条件、排序条件、连接条件的列。

经验总结

1.列上进行函数计算将不会使用索引;
2.对于创建索引的列,避免存储NULL,NULL会使索引更加复杂、效率变低,可以使用NOT NULL进行约束;
3.对于模糊查询like '%abc%',将不会使用索引,而like 'abc%'将会使用索引;
4.对于not in、not exists、!=等负向查询将不会使用索引;
5.每次查询只使用一个索引,如果where条件使用了索引,order by将不再使用索引;
6.对于where子句中有多个查询条件的,单列索引的效率不如复合索引,因为查询每次只能使用一个索引;
7.MySQL只对以下操作符才使用索引:<、<=、=、>、>=、between、in,但是需要注意in的范围值不要太多;
8.union all可以使用索引,但本身效率不是很高,不建议使用;
9.列上进行类型转换的将不会使用索引;
10.老版本MySQL对OR条件不使用索引,新版本才支持,不建议使用OR。

关于索引的实战经验总结后续还会不断更新。

相关文章

  • MySQL索引实战总结

    MySQL索引对数据检索的性能至关重要,盲目的增加索引不仅不能带来性能的提升,反而会消耗更多的额外资源,本篇总结了...

  • MySQL索引知多少

    mysql索引 总结关于mysql的索引,查询优化,SQL技巧等 1 索引类型 B-Tree索引 Hash索引 ...

  • MySQL 12 深入理解MySQL索引底层数据结构与算法

    MySQL实战 目录 索引到底是什么 索引是帮助MySQL高效获取数据的排好序的数据结构 索引存储在文件里 索引结...

  • Java程序员必备收藏系列:解析 MySQL 索引优化,轻松掌握

    本文主要讨论MySQL索引的部分知识。将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内...

  • 一篇文章搞定:MySQL 索引优化

    本文主要讨论MySQL索引的部分知识。将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内...

  • MySQL实战 | 04 为什么要使用索引?

    原文链接:MySQL实战 | 为什么要使用索引? 用过 MySQL 的应该都知道索引是干啥的吧,应该多少都设置过索...

  • 17.MySQL优化

    《高性能MySQL》——这本书都有的 “字段”优化总结 “索引”优化总结 索引的优化 “查询SQL”优化总结 “引...

  • sql语法 _ 索引

    索引 1,索引相关 2,MySQL创建,删除索引 3,索引测试 4,索引总结 (表格接上) 1,如果范围大...

  • Mysql 索引 & 锁

    Mysql索引在开发工作中经常用到,在此总结一些关于mysql索引的一些学习笔记 1mysql索引的本质是什么? ...

  • MySQL中的索引用法总结

    MySQL中的索引用法总结 索引作为一种数据结构,其用途是用于提升检索数据的效率。 索引的分类 MySQL中的索引...

网友评论

    本文标题:MySQL索引实战总结

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