2011-09-27 78 views
-3

我想在mysql數據庫中存儲一些記錄。記錄有日期欄。我想按照日期列的排序順序存儲它們。按日期排序順序在mysql db中存儲記錄

例如,具有記錄日期27/SEP/2011得到在具有記錄日期的頂部存儲作爲第一行26/SEP/2011爲:

ID_1,name_1,27/sep/2011
id_2,name_2,26/sep/2011

如果有新的記錄出現在將來的日期,他們將被插入到頂部。

我不想在使用select by order by desc時訂購它們。 我希望他們能夠按排序順序直接插入數據庫。

該怎麼做?

感謝...

+0

爲什麼你會想要這樣做? – ManseUK

+4

天哪,插入它們並創建一個索引。訂購他們的檢索。 – Martin

+4

這不是數據庫如何工作。您將數據存儲在數據庫中,您不需要在數據庫中訂購它們,您可以根據需要訂購和過濾結果集。 – Rufinus

回答

1

您可以通過添加另一個表做到這一點 - 將所有的記錄到該表(電流和新的)然後做並插入如下:

INSERT into newtable 
select * from temptable 
order by temptable.date 

爲什麼你需要這樣做?爲什麼不在查詢中使用orderby?

正如下面的評論中指出的 - 你需要每次

+0

您還需要在每次插入新行之前刪除此「newtable」表中的條目。 –

+0

@GhazanfarMir - 是的,你的權利....無論如何,這是一個愚蠢的想法 - 我總是在查詢中使用OrderBy ...只是試圖指出他們在正確的方向,他們應該選擇這樣做... – ManseUK

1

我當人們想確定的存儲記錄物理順序總是驚訝地截斷newtable中。基本上,由於多種原因,這是一個糟糕的主意。

1)如何記錄物理存儲不應該是你的關注。 2)記錄如何呈現應該是你關心的問題。這就是爲什麼我們有內置的ORDER BY。

3)確定物理存儲應該由該領域的專家來完成,因爲它具有性能影響 - 這是它自己的主題,我不會詳細討論。

基本上,擔心按排序順序獲取數據,而不是按排序順序獲取數據。

這是一個壞主意的原因是因爲你會篡改永遠不是好主意的主鍵。最重要的是,每次插入內容時都必須對記錄重新排序。只是不要改造熱水。

+0

不會週期性地重新訂購一個數據庫,比如說2 000億個數值比每次請求重新排序都沒有效率更高?重新排序過程似乎是我現在整個系統的瓶頸。如果我在客戶端做它,它會掛斷4-7秒。我還沒有嘗試在服務器上做這件事,但隨着客戶端處理它的方式我沒有很高的期望。 – nsij22

+0

它不會。你必須檢索20m值(通常來自磁盤),然後MySQL必須將其存儲在某個地方(如果你的RAM不足,它會再次進入磁盤)。然後它必須根據您所需的條件對其進行排序並將其寫回磁盤。另一種方法是讓MySQL選擇最佳的保存方式(它通過PK來物理排序),然後你找回你需要的東西(你肯定不需要20米的記錄) - 這很快,因爲你會使用一些條件 - 然後你按照你需要的方式對它進行分類。這是相同的操作,但規模較小。 –