我得到了關於MySQL辛辣的問題...MySQL的:最佳實踐來獲得最後一個記錄
這裏的想法是選擇第n從表中最後一個記錄,由物業過濾,(可能來自另一個表) 。那很簡單。
在這一點上,你想回復:
設N = 10
SELECT *
FROM huge_table
JOIN another_table
ON another_table.id = huge_table.another_table_id
AND another_table.some_interesting_property
ORDER BY huge_table.id DESC
LIMIT 10
沒有JOIN沒關係,MySQL的讀取結束索引和特羅我10個項目,執行時間是可以忽略不計 通過連接,執行時間取決於表的大小,並且在許多情況下不可忽略,解釋說明mysql是:「Using where; Using index; Using temporary; Using filesort」
MySQL文檔http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html)指出:
「您正在連接多個表,並且ORDER BY中的列不是全部來自用於檢索行的第一個非常數表。 (這是EXPLAIN輸出的第一個表中沒有一個const聯接類型)。」
解釋爲什麼MySQL不能使用索引來解決我的ORDER BY prefering一個巨大的文件排序...
我的問題是:使用ORDER BY ... LIMIT 10獲得最後的物品是否很自然?你是否真的在按照升序排列的卡片組中挑選最後的10張卡片?我個人從底部挑選10張卡片..
我嘗試了很多可能性,但都結束了,結論是我很快查詢了10個第一個元素,而且查詢ORDER BY子句的最後一個原因的速度很慢。
「Select last 10」真的會很快嗎?我錯在哪裏?
「AND another_table.some_interesting_property」是與編輯前的值相比較的嗎? – 2010-11-29 21:18:44