我要解釋一下,像這樣的查詢量:(POST_ID = PRIMARY,blog_id =指數)SQL提高效率:限制文件排序
SELECT post_id FROM posts WHERE blog_id IN (2,3,...) ORDER BY post_id DESC LIMIT 10
更新:在了IDS()可能很多。 如果DB使用blog_id關鍵的查詢,它使一個文件排序,因爲該指數是這樣的:
(blog_id,post_id)-> (1,55) (1,59) (1,69) (2,57) (2,71) (2,72) (3,12)
的相反,如果IN()您搜索只是一個ID blog_id = 2,它不需要執行任何文件,因爲所有的匹配都已經完成。
我認爲這是發生的問題,而不是100%確定,但僅僅通過查看查詢執行時間,是因爲如果我添加一個LIMIT 10,有效的方法是隻捕獲每個文件的最後10個ID blog_id索引鍵匹配,也許它已經這樣做了,但看起來像一個IN(2,3,4)ORDER BY post_id DESC LIMIT 10,它將filesids成千上萬的id而不是30.
我希望我只是死了錯,因爲如果我不是那是一個可怕的低效率的錯誤。 如果我是對的,是否有任何引擎或改變我可以做?甚至改變數據庫。目前我在10.1.13-MariaDB上,表是InnoDB
你真的在做'SELECT post_id',而不是'SELECT *'嗎?這對_this_問題有重大影響。 –
是的,因爲它是一個更大的子查詢,我選擇*並加入到其他表中,並且在一年前的一個問題中已經有人告訴我這種形式更有效。 http://stackoverflow.com/questions/30414641/avoid-filesort-with-inner-join-order-by – Vixxs