我正在製作一個網站,它需要一個絕對龐大的mysql數據庫,可能有數百萬甚至數十億行的單個表。海量MySQL數據庫
表結構是兩個「文本」字段。
如何優化查詢?我希望能夠一次只讀取一行,但儘可能快。
一個字段可能有稍長的文本塊,但另一個字段會一直有相對較短的一個,任何行選擇都將基於另一個字段進行。
另外,有沒有更好的方法來存儲這些許多值?
謝謝你的幫助!
我正在製作一個網站,它需要一個絕對龐大的mysql數據庫,可能有數百萬甚至數十億行的單個表。海量MySQL數據庫
表結構是兩個「文本」字段。
如何優化查詢?我希望能夠一次只讀取一行,但儘可能快。
一個字段可能有稍長的文本塊,但另一個字段會一直有相對較短的一個,任何行選擇都將基於另一個字段進行。
另外,有沒有更好的方法來存儲這些許多值?
謝謝你的幫助!
所以在本質上獲取了行你會做這樣的事情:
SELECT * FROM myTable WHERE col1 = "someText";
是正確的嗎?如果是這樣,那麼你可以真正應用的唯一優化是在col1
上添加一個索引。
但是,您的數據是否以某種方式自然分離?有沒有邏輯組存在?如果是這樣,你可以將它分解成多個表格並在它們之間分配數據。
如果不是,那麼你可以總是根據col1
中的第一個字符進行隔離,假設這裏的值總是處於一個合理的範圍內(如[a-z]
)。然後,你可以做這樣的事情:
SELECT * FROM myTable_s WHERE col1 = "someText";
SELECT * FROM myTable_o WHERE col1 = "otherText";
擁有多個小表和它們之間選擇編程將比具有在它的一切一家獨大的錶快,非常大的數據集。 「
這很好,我可以爲此付出。 – Cyclone 2011-03-27 02:31:43
要優化它的唯一方法是不使用文本,但爲您的列使用varchar [size] 但這隻有在大小具有可重新分區限制時纔可能(如果大索引不會有效,和varchar [size]具有固定大小不同於文本)
當然,最好的方法是使用一些簡短的搜索,以百萬表的表我只能推薦使用int作爲主鍵,即使這意味着你必須添加一個新的列
當談到數據庫時,我遠離專家,但如果您基於單個字段選擇單個行,我會假設該字段可能是唯一的?在該字段上創建一個哈希索引可能是一個好主意,儘管我不確定在數百萬行中能夠保持多好。
」或者甚至是單個表中的數十億行「 - 」表結構是兩個「文本」字段。「 - 聽起來像一個倉庫 – 2011-03-27 01:23:19
你想存儲什麼,你到底用了什麼?也許如果我們知道更多的背景,我們可以幫助更多 – 2011-03-27 01:31:55