2009-08-06 81 views
0

如果我們有表像這樣海量MySQL查詢

消息:ID(INT)|消息(TEXT)|日期(TIMSTAMP)

並讓我們想象有數據不斷進入此表。例如

1,'Hello World',12345678;

2,'Yoooo Whats Up',12345679;

3,'我叫哈爾',12345680;

現在這個表是巨大的,是永遠不會被刪除

SELECT * FROM articles WHERE MATCH (message) AGAINST ('Hal'); 

現在會變成這樣是可行的,什麼是陷阱

我也在想有每一天,一羣一羣的值。由於大多數查詢都代表什麼進來什麼日子,所以如果我們改變數據庫結構

消息:ID(INT)|組(INT)|消息(TEXT)|日期(時間戳)

如果本集團是一旦我們進入新的一天

還有什麼是遞增的最佳辦法是將遞增的ID值,可以用做MySQL或做我們必須做programaticly

然後我們可以做到這一點通過使用下面的

SELECT * FROM articles WHERE MATCH (message) AGAINST ('Hal') WHERE group=3; 

讓我知道你的想法,以減少時間或者想出什麼是存儲大型數據庫表並查詢它以返回特定值的最佳方式。

+2

第一個問題,我覺得有必要問的是,爲什麼要存儲的日期作爲BIGINT? – ninesided 2009-08-06 10:16:42

+1

避免Y2038問題? – ymv 2009-08-06 10:32:53

+0

即時通訊不會被存儲在數據庫中,它將成爲一個unix時間值..只是coudnt記住正確的ValueType:D – 2009-08-06 10:37:46

回答

0

在做了一些研究後,我發現了一些概念和想法,這些概念和想法將會使海量SQL數據庫中的事情變得更快。

分組的想法並不錯,因爲它會縮短存儲在數據庫中的索引的平衡樹的大小,但是說如何決定組的順序。你是基於每日,每月還是使用其他一些標準。

哪種方式可以決定羣組順序,請記住平衡樹索引的結構。

我上面的項目與上面的例子相比有一個很大的範圍,但從上面我會做一個索引date。這將爲我提供一個平衡的主鍵樹和日期平衡的樹。因此,我可以通過平衡的樹來達到我需要的價值。

請記住陷阱和平衡樹索引結構的優點:

你需要記住certial方面。

  • 平衡樹爲您提供更快的內存成本搜索。
  • 平衡樹如果不仔細設計可以增加你的表的大小,以至於平衡樹比它自己的數據使用更多的空間。所以在平衡的樹上保守。不要把每個柱子扔在它上面
  • 設計你的代碼的方式是它使用索引的colums來縮短返回查詢的大小。

希望這有助於具有海量數據的大小來設計表其他人:d