Mysql中索引的学习(二)

93 阅读3分钟

前言

最近公司又要开始搞国产化数据库项目了,上次应用更换国产化数据库后发现好多程序出现跑不动的情况,后来跟踪日志发现有一些sql跑的很慢,原因就是之前oracle数据库性能比较好,虽然没有索引但是也不至于太慢,更换了这个基于mysql的数据库后,没有索引的弊端一下子就暴露了出来。那解决办法呢就是根据业务情况修改或新增索引。

mysql索引常见的几种

1、B+树索引 2、全文索引 3、哈希索引

这里主要介绍innodb中各索引的知识点:

innodb中几个容易让人忽略的点

1、innodb中哈希索引不需要人为干预,innodb会自动根据表的使用情况为表生成哈希索引

2、使用b+树索引来查找并不会直接查找到数据行,b+树索引只能查找到目标数据所在的页,然后把整页数据加载到内存,最后再通过二分法查找的形式找到目标数据。

建立索引的原则

1、高选择性

什么是高选择性?如果一张表的一个列中,内容重复率很高,比如一列记录了性别,那么这列数据肯定只有两种值,那这种情况就算是低选择性,使用索引并不能高效的过滤出想要的数据。

2、数据量超过300的表应该有索引;

3、经常与其他表进行连接的表,在连接字段上应该建立索引;

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

5、索引应该建在选择性高的字段上;

6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

   A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

   B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;

   C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

   D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

   E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

8、频繁进行数据操作的表,不要建立太多的索引;

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第8天,点击查看活动详情