2010-03-29 43 views
0

一個沒有經驗的問題,多個文本字段中存儲:MySQL的:用於記錄

我需要每個記錄約10個未知長度的文本字段存儲到一個MySQL表。我預計這張桌子總共不會超過5萬行,但速度很重要。數據庫操作將僅用於所有實際目的的SELECT(並且搜索將僅使用整數PK ID來完成)。我正在使用InnoDB。

換言之:

id | text1 | text2 | text3 | .... | text10

據我所知,MySQL將在其他地方存儲文本,並在表本身使用自己的指標,我想知道是否有任何基本的性能影響,我應該擔心的數據存儲方式? (即來自表格的幾個「子提取」)。

謝謝。

回答

3

基本上,你問的是如果這10個TEXT字段將需要10個單獨的磁盤尋找你檢索的每一行。我不確定InnoDB是否會連續編寫這些代碼,並能夠快速閱讀它們,因此,對於大多數性能問題,最好的辦法是創建並運行一些簡單的測試,找出其含義(除非有人走來,並聲稱知道)

幾件事情需要注意:

  • 因爲你的表是不是很大,你大多采用進行選擇,你可以只緩存數據。 InnoDB可以將實際數據存儲在其緩衝池中(與MyISAM不同) - 因此請嘗試將此值(innodb_buffer_pool_size)設置爲足夠容納您的數據。
  • 如果您總是閱讀所有10列,並希望使用單個TEXT字段,則可以添加一些處理將數據拆分爲10個部分的中間代碼,方法是在每個字段前面添加字符數/字節數,所以當你讀回數據時,你確切知道每個部分佔用了多少空間。
  • 如果您遵循上述方法,則可能需要使用較大的TEXT字段,如MEDIUMTEXT或LONGTEXT。
2

您打算選擇由id(索引鍵)還是通過文本字段中的數據選擇記錄?

如果是前者,表現不應該是一個問題。如果是後者,請確保您索引您將用於裝載的任何字段。

+0

SELECTs將始終僅基於整數ID,永遠不會是文本。 – Tom 2010-03-29 17:07:14