松散索引扫描(松散索引扫描)
优化组的最有效的方法是把字段需要组时完全可以直接使用索引,使用这种访问方法时,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()或马克斯()函数的参数是例外的。