Jon*_*han 8 mysql index optimization
我最近参加了 Facebook MySQL 工程师的演讲,他在那里提到使用FORCE INDEX
减少 I/O。
这与 MySQL 查询优化器有关,无需访问数据字典并进行计算。
Rol*_*DBA 10
关于FORCE INDEX 的一个很好的参考来源是MySQL Database Design and Tuning一书。
在第 120 页第 4 段,它说:
FORCE INDEX 适用于何处?FORCE INDEX(在 4.0.9 版本中首次启用)与 USE INDEX 非常相似;这两个选项的主要区别在于 FORCE INDEX 要求 MySQL 使用索引(如果可能)代替更昂贵的表扫描,而 USE INDEX 仍然允许优化器选择表扫描。
同页说 MySQL 不会警告索引不相关,并在 USE INDEX 的情况下切换到表扫描。
因此,FORCE INDEX 可以在使用索引之前将 MySQL 查询优化器排除在外。任何正确使用 FORCE INDEX 的查询都会减少 I/O。为什么我说得好?
想想看。如果您选择浏览的索引是覆盖索引,并且您只需要覆盖索引中列出的列,则无需联系表以获取数据。所有 I/O 仅限于索引页。在最坏的情况下,通过执行索引扫描来检索所有请求的数据。如果需要对请求的数据进行排序,从而绕过任何请求的排序,那确实是一件好事。
在“交战规则”方面,FORCE INDEX 只应在以下情况下使用
如果您试图将方钉放入圆孔中,则不应使用 FORCE INDEX 强制查询使用索引。换句话说,仅遍历索引以按特定顺序访问表数据不会给您带来任何好处。事实上,它会在总线下抛出查询性能,因为没有预先了解您的数据需要如何可用。