2011-08-10 62 views
6

我想知道如何在引擎蓋下工作,特別是對於大型結果集。例如,數據庫可能會將原始結果寫入磁盤,然後進行外部排序?數據庫如何實現SQL'ORDER BY x'?

我也想知道它的運作方式限制...抵消。如果數據庫不能使用現有的索引,那麼數據庫似乎必須對整個事物進行排序並採集原始結果集的子集。

回答

1

的MySQL顯示自己的訂單通過優化上this link

甲骨文顯示了理論值自己的排序算法程序here

基本上,如果你有一個指標,它是有序的。但是,當你不排序發生是O(n log n)

0

你幾乎有它的權利。如果什麼都沒有準備好或者預先計劃好(例如索引,或者以前準備或者緩存的數據),那麼是的,必須讀取爲了生成正確順序而必須考慮的所有數據,並且如果數據量被處理過的不能適應可用/已分配的內存,則需要完成磁盤緩存。

這是一個不平凡的性能問題,每個RDBMS都會有巧妙的方法來解決和優化它,這樣你就可以使用他們的產品而不是那種粗製濫造的「品牌X」淘汰。