松散索引扫描(松散索引扫描)

优化组的最有效的方法是把字段需要组时完全可以直接使用索引,使用这种访问方法时,MySQL使用索引,由关键字排序的类型(如B树索引),这使得用于组索引字段没有完全覆盖在哪里条件指标的关键。因为只有在索引关键字的一部分包括在内,它被称为一个松散索引扫描。

从历史上看,MySQL不能做松散的索引扫描。这种方式可以扫描索引的不连续部分。假设在下面的示例中,列(A,B)上有一个索引,我们需要运行下面的查询。

MySQL >选择…从TBL在B 2和3之间;

因为索引从列A开始,但在不创建列A的地方,MySQL将执行全表扫描,以消除不匹配的行。

我希望有一个快速的方法来执行查询。一些索引结构(不是MySQL)允许您查找每个范围的开始,扫描到范围的结束,并跳转到下一个范围的开始。

当然,这是一个相对简单的例子,通过添加一个不同的索引可以很容易地实现。实际上,多次添加另一个索引并不一定解决问题。

在MySQL 5中,在特定条件下可能会出现松散索引扫描,例如在包查询中查找最大值和最小值:

MySQL >解释选择actor_id,max(film_id)

从-> sakila.film_actor

组-> actor_idg

*************************** 1。行***************************

编号:1

select_type:简单

表:film_actor

类型:范围

possible_keys:空

关键词:小学

key_len:2

参考:空

行数:396

额外:使用组的索引

在下面的一些情况下,可以用松散索引扫描:

查询指向一个表。

组包含索引的第一个连续部分(如果查询有一个组的明显子句,所有不同的属性指向索引的开始)。

只使用累积函数(如果存在)min()和马克斯(),它们都指向同一列。

索引的任何其他部分(除了查询中引用的组)必须是常量(也就是说,它必须用常量引用),但是MIN()或马克斯()函数的参数是例外的。