2012-07-06 28 views
2

我很好奇这是如何处理的。我有一个名为titlevarchar(255)列,它有索引的前10个字符。在VARCHAR中引用索引前缀时,MySQL如何使用ORDER BY?

如果我创建一个按标题排序的MySQL查询,它是单独利用该索引,还是忽略它,还是必须发出命令来使用该索引?

例如假设我有两个title项目命名为:

This is the same thing 
This is the same thing only slightly different 

前10个字符是相同的,那么,如何MySQL的处理这个问题?它是否使用前缀索引到前10个字符,然后逐行索引?

+1

MySQL可能会或可能不会使用索引。声明的解释将显示索引是否被使用。使用'ORDER BY title',使用索引是不够的,除非MySQL有一些神奇的方式来知道没有标题超过10个字符长度......我认为它不是,如果它确实如此,它可能因存储引擎而异(MyISAM与InnoDB)。 MySQL有可能利用索引来优化排序,但它不能完全避免排序,至少不能使用该索引。 – spencer7593 2012-07-06 23:42:37

回答

1

嗯,这是said说:

该指数还可以用来即使ORDER BY不将 指数完全一致,只要所有的指标中未使用的部分和 所有额外的ORDER BY列是WHERE子句中的常量。

但我强烈建议使用EXPLAIN检查此查询,以查看优化程序将选择哪个路径。