我一直在尝试加速涉及复杂查询的ORDER BY的MySQL查询。我已经用尽了几个选项,并且已经非常接近了 - 我找到了在相关表格上实现伪反向索引的最佳解决方案。
我基本上模仿了这篇文章的建议(包括使用id而不是发布日期的变体,使用联合索引等): http://www.igvita.com/2007/08/20/pseudo-reverse-indexes-in-mysql/
并成功添加了额外的列,填充了它,添加了索引,但是查询
SELECT * FROM products USE INDEX (index_reverse_created);
似乎不起作用。插入随机字或常规列代替索引名称会引发错误,因此我意识到它已成功检测到索引。
然而,使用EXPLAIN SELECT * ...进一步检查显示了这一点:
http://i44.tinypic.com/2aes304.png
possible_keys
和key
的特殊部分是(NULL)。
SHOW INDEX FROM产品产生了这个:
http://i41.tinypic.com/fvvdl1.png
这似乎是一套健康的指数。
总而言之,我很难过。似乎索引就在那里,但在尝试实际使用它时会出现问题。
答案 0 :(得分:2)
当您的查询中有where,order by,group by子句时,将使用您的索引。 你写了简单,简单的查询,没有任何额外的查询,mysql将使用fullscan和读取数据。