MySQL索引上的几个值得注意的地方

在数据库中,最有影响的因素包括数据库的锁定策略、缓存策略、索引策略、存储策略、执行计划优化策略。

索引策略决定了数据库对数据的快速定位效率,存储策略决定了数据持久性的有效性。

1。索引不存储空值。

更准确地说,单列索引不存储空值,而复合索引不存储null的总值。索引不存储null,所以当空条件用于此列时,因为索引是基本的。

没有空值,不能用于索引,只有全表扫描。

为什么索引列不能保存空值

索引列值是建立起来的,它不可避免地涉及到一些比较运算,空值的特殊性是大多数操作都是空的,在这种情况下,空值实际上不是。

参与索引构造的过程,也就是说,索引树的叶子节点上没有空值,就像其他值一样。

2。不适用于键值不多的列(重复数据的多列)。

如果索引列类型有5个键值,如果有1万个数据,那么type = 1将访问表中的2000个数据块。

除了访问索引块之外,总共访问了200多个数据块。

如果所有的表扫描,假设10块数据是一个数据块,那么只有1000块数据将被访问,数据块被完整的表扫描访问。

稍微少一点,肯定不会用到索引。

三.序言模糊查询不能利用的指标(如% xx'or是XX %)

如果价值等一列的代码is'aaa ','aab ','baa ','bab ',如果代码是ab'conditions,由于前面

模糊,所以你不能使用索引的顺序,你必须一个一个地寻找它是否满足条件。

描述。如果是这种情况like'a %的代码,你可以在一个代码开始找到代码的位置,当它涉及到B的开始

当使用数据时,查找停止,因为以后的数据不能满足要求。

4.mysql主要提供索引的2种方式:B树索引,Hash索引。

b树索引具有查找范围和前缀查找的能力。一个B树有n个节点,检索一个记录的复杂度为O(logn),相当于两个点。

哈希索引只能与查找相等,但不管哈希表有多大,搜索复杂度是O(1)。

显然,如果差异很大,等价查找(in,in)占主导地位,散列索引是一种更有效的选择,并且具有O(1)的搜索复杂度。

如果值的差异比较差,并且以范围查找为主,那么B树是更好的选择,它支持范围查找。

在MySQL两大存储引擎,MyISAM和InnoDB,采用不同的索引和存储策略。本文将分析它们的异同和表现。