我想知道如何在引擎蓋下工作,特別是對於大型結果集。例如,數據庫可能會將原始結果寫入磁盤,然後進行外部排序?數據庫如何實現SQL'ORDER BY x'?
我也想知道它的運作方式限制...抵消。如果數據庫不能使用現有的索引,那麼數據庫似乎必須對整個事物進行排序並採集原始結果集的子集。
我想知道如何在引擎蓋下工作,特別是對於大型結果集。例如,數據庫可能會將原始結果寫入磁盤,然後進行外部排序?數據庫如何實現SQL'ORDER BY x'?
我也想知道它的運作方式限制...抵消。如果數據庫不能使用現有的索引,那麼數據庫似乎必須對整個事物進行排序並採集原始結果集的子集。
索引是有序的;如果有合適的索引,那將會被使用。否則,他們需要按照您的設想進行排序。爲查詢執行計劃(你可以用例如EXPLAIN
或通過client menus獲得;得到它的確切方法與DBMS變化)可能包含提示作爲查詢的排序方式。
參見:
你幾乎有它的權利。如果什麼都沒有準備好或者預先計劃好(例如索引,或者以前準備或者緩存的數據),那麼是的,必須讀取爲了生成正確順序而必須考慮的所有數據,並且如果數據量被處理過的不能適應可用/已分配的內存,則需要完成磁盤緩存。
這是一個不平凡的性能問題,每個RDBMS都會有巧妙的方法來解決和優化它,這樣你就可以使用他們的產品而不是那種粗製濫造的「品牌X」淘汰。
+1很棒的信息(不僅僅適用於mysql) – seand