MySQL:FORCE INDEX与USE INDEX的区别

27

我最近在为MySQL表进行索引优化,我注意到
FORCE INDEXUSE INDEX 几乎具有相同的功能,我想问一下它们之间有什么不同?


1
你也可以使用FORCE INDEX,它的作用类似于USE INDEX(index_list),但额外增加了一个假设表扫描非常昂贵的条件。换句话说,只有在没有办法使用给定的索引来查找表中的行时,才会使用表扫描。 - valex
它们是相同的还是消耗更多资源? - Teddybugs
3
如果使用 USE INDEX,则建议优化器使用此索引,但如果优化器认为全表扫描更快,则可以使用全表扫描。如果使用 FORCE INDEX,则强制优化器使用此索引,即使它认为全表扫描更有效率。只有在没有办法使用索引查找行时,优化器才会使用全表扫描。 - valex
@valex 把这个发表为答案 :) - Michel Feldheim
1个回答

38

将我上面的评论作为答案发布:

如果使用USE INDEX,则建议优化器使用该索引,但如果优化器认为使用表扫描更快,则可以使用表扫描。如果使用FORCE INDEX,则即使优化器认为表扫描更高效,也要强制优化器使用此索引。仅当没有方法使用索引查找行时,优化器才会使用表扫描。

索引提示语法:

您还可以使用FORCE INDEX,它的作用类似于USE INDEX(index_list),但是还假定表扫描非常昂贵。换句话说,只有在无法使用给定的索引之一查找表中的行时,才使用表扫描。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接