我有一個MySQL查詢,我想從表底部到頂部提取結果。我認爲ORDER
BY,但我正在尋找更快/更高效的東西。我只想知道是否有內置的東西讓搜索從底部(即最近)到頂部(最早)。從上到下MySQL提取結果
我的數據庫很大,所以我認爲ORDER BY
可能會很慢。提前致謝!
我有一個MySQL查詢,我想從表底部到頂部提取結果。我認爲ORDER
BY,但我正在尋找更快/更高效的東西。我只想知道是否有內置的東西讓搜索從底部(即最近)到頂部(最早)。從上到下MySQL提取結果
我的數據庫很大,所以我認爲ORDER BY
可能會很慢。提前致謝!
對數據庫中的數據進行排序幾乎肯定會更高效。數據庫旨在處理大量數據。中間層不可用的數據庫有多種優化可用。如果您打算在中間層編寫一個超高效的排序例程,該例程利用了您對數據所沒有的信息(數據庫沒有)(例如,將數據集中到一個數十臺中間層機器集羣中,以便排序永遠不會泄漏到磁盤上,利用數據大部分命令選擇一種通常不會特別有效的算法的事實),您可能會超出數據庫的排序速度。但這往往是罕見的。
根據查詢,例如,數據庫優化程序可能會選擇一個查詢計劃,該計劃按順序返回數據,而不執行排序。例如,數據庫知道索引中的數據是已排序的,因此它可以選擇執行索引掃描來按順序返回數據,而不必實現和排序整個結果集。如果它必須實現整個結果,它只需要你正在排序的列和某種行標識符(例如Oracle中的ROWID),而不是排序整行數據,就像天真的中間層實現可能會做的那樣。例如,如果在(col1,col2)上有複合索引,並且您決定在UPPER(col2),LOWER(col1)上進行排序,則數據庫可以從索引讀取col1 & col2值,對行標識符進行排序,以及然後從表中獲取數據。當然,數據庫不必這樣做 - 優化器將考慮對從表或各種索引獲取數據的成本進行排序的成本。數據庫可能會得出結論:最有效的方法是執行表掃描,將整行讀入內存並對其進行分類。它可以得出結論,利用索引可以獲得更多的I/O來獲取數據,但通過減少或消除排序成本來彌補。
我推薦使用ORDER BY column_name DESC子句比從它的php程序中排序更快。
爲您正在訂購的列添加索引 –
@chuex我確實有一個我正在訂購的索引。我認爲這種方法,我只是問是否有更好的方法。 – Shahar
如果您發佈現有的查詢,表格結構和任何查詢計劃,這將有所幫助。正如它所寫,很難給出答案。 –