前言
最近公司又要开始搞国产化数据库项目了,上次应用更换国产化数据库后发现好多程序出现跑不动的情况,后来跟踪日志发现有一些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天,点击查看活动详情