我想展示10个最新论坛主题,我通过订购ASC日期来做。我把索引放在日期上,但是,它仍然会检查所有行(我使用EXPLAIN来查看)。
问题是什么,或者看不到我的桌子就看不到它?
谢谢。
答案 0 :(得分:1)
取决于索引的类型,按日期排序需要完整扫描。我认为你用mysql做不了多少。
然而,一个解决方案是使用WHERE子句“剪切”搜索。例如WHERE date > 10 days ago
在完整扫描时不会进行排序,而是在WHERE子句之后剩下的内容。
可能看起来很奇怪,并且根据您的表格,您可以使用... 2个查询来优化查询。例如:
SELECT max(primary key) from topics => $max
SELECT topic from topics where primary key >= $max - 10
如果您的表有很多行,那么这两个请求将比完全扫描更快,如果您的主键是自动递增,肯定会给出相同的结果。
我希望这会对你有所帮助
Jerome Wagner
答案 1 :(得分:0)
你所描述的内容应该有效,但很容易被打破http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html列出了它可以破解的原因。没有看到你的SQL,我不知道你在做什么。但是,这是一个如何使这项工作的例子:
SELECT topic
FROM forum_posts
ORDER BY some_date DESC
LIMIT 10
如果您有一个更复杂的查询可以打破这个问题,您可以加入此查询以过滤结果并保存工作。例如。
SELECT f.topic
, o.some_information
, some_date
FROM (
SELECT id, topic, some_date
FROM forum_posts
ORDER BY some_date DESC
LIMIT 10
) f
JOIN other_table o
ON o.forum_id = f.id
ORDER BY some_date DESC