我有以下查询,我已经添加了ORDER BY DESC LIMIT来反转顺序并将结果限制为30.它工作正常,但是,我想知道是否还有其他更快的方法来完成这项工作。
$q = "SELECT r.*,
us.username,
a.title, a.id
FROM #__rate r
LEFT JOIN #__users us ON r.voter_id=us.id
LEFT JOIN #__tek_reviews a ON r.reviews_id=a.id
WHERE r.user_rated_id=" . $db->quote($userid) . 'ORDER BY r.id DESC LIMIT 30';
我认为这种方式首先完成搜索,然后排序并限制结果。有没有办法开始反向搜索并限制结果?
我在某处使用REVERSE()函数来帮助同一人,但我无法使其工作。有什么建议?
提前致谢。
答案 0 :(得分:0)
MySQL REVERSE(str) - 返回字符串str,反转字符的顺序。此功能不影响选择结果顺序,因此无法帮助您 我认为你的查询足够快,因为它使用主键来获得结果。
答案 1 :(得分:0)
INDEX(user_rated_id, id)
#__rate
上的应该提高效率。我的[ index cookbook ]涵盖了构建此索引并使其在LIMIT
中一直有用的情况。
DESC
不会影响问题。扫描可以从单个指定user_rated_id
行的末尾开始,向后扫描30行。
确定它是否只触及30行(相对于整个表格):
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';