2011-11-03 75 views
0

首先,對不起我的英語我不擅長它,但我會給它我最好的拍攝:) 我已經閱讀了很多網頁描述如何如果你的數據可以放入內存,速度會很快。下面的鏈接是一個例子:我怎麼能知道我的數據適合內存

http://forums.mysql.com/read.php?22,428030,428157#msg-428157

http://www.mysqlperformanceblog.com/2010/11/19/is-there-benefit-from-having-more-memory/

雖然我試着去了解它,我仍然感到困惑的「適合在內存」

語義我有一些疑問,我想請你幫我解釋一下如下:

1)我怎麼知道我的數據集已經適合內存,不知道Mysql是否有一些工具或命令告訴我們數據重新如何記憶中的雙方,或者你只需​​要猜測?

2)我設計,有一個表,其架構如下應用:

ID(IHT)| data1(varchar(10))| data2(varchar(10))| data3(文本)| meta1(int)| meta2(int)| meta3(int)

從上面的模式中,用於包含每一行的最小字節數應該爲int(4)+ varchar(10)+ varchar(10)+ text(2)+ int(4) )+ int(4)+ int(4)= 38字節 這是相當小的。所以如果我有一百萬行,我的記憶應該仍然適應它,因爲它只需要38 * 1,000,000 = 38Mb。

問題在於data3列的類型是文本,因爲此列可能包含大量的數據。假設data3總是包含一個10k字節的數據,如果我有一個 的行,它將需要高達(38 + 10,000)* 1,000,000 = 10,038,000,000或大約十千兆字節!當然,這些數據並不適合內存。

因爲在這張表中,每行可以在 應用程序的生存期內頻繁讀寫,我應該考慮將data3列移動到另一個表中,以便此表中的每一行總是很小,因此保留在內存導致更快 的讀寫?

3)我相信有數據適合內存可以幫助您閱讀, 我想知道寫操作是否也會從中受益,以及如何?

謝謝。

回答

0

IIRC,MySQL中的文本列並不總是完全保存在內存中(但我可能是錯的)。

當然,如果您的數據足夠大以至於比可用內存更大,則不適合此處。

什麼是重要的是您的表的索引,以及索引都適合內存的事實。

確定的方法是找出實驗和基準。