2010-09-30 28 views
4

我正在研究一個允許用戶動態地向網絡表單添加問題的應用程序。我們使用MySQL作爲後端,我試圖找到存儲表單數據的最快,最有效的方式。MySQL文本字段和內存使用

以前,我們將數據存儲在每個表單部分的單獨表中。這些列是根據一個系統命名的,它允許我們將動態問題映射到其存儲位置。缺點是存儲映射系統設計的很糟糕,這使得用現有數據修改表單變成了一場噩夢。另外,MySQL對每行內存的限制限制了每個部分可能有的問題數量。

因此,我正在尋找使用單個表格來包含所有表單數據。由於短文問題是允許的,我正在考慮使用Text或MediumText作爲實際數據的字段類型。但是,在運行查詢時,我擔心RAM的使用情況。當我爲數據運行查詢時,MySQL是否足夠聰明,只能分配字段中數據所需的內存(即使它是一個小整數),還是會分配爲MediumText字段允許的全部數量?

此外,有沒有更好的方式可以考慮存儲這樣的動態數據庫的數據?

艾米

回答

1

是的,當您創建用於存儲這些大型文本字段的表格對象時,請嘗試在表格中使用壓縮。這聽起來像是一個完美契合,如果你啓用了InnoDB插件。

http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-compression-tuning-when-data.html http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-compression-usage.html

您的回答簡單的表定義可能是這樣的:

CREATE TABLE test_answers (
answer_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
test_id INT UNSIGNED, 
question_id INT UNSIGNED, 
answer_body TEXT, 
PRIMARY KEY(answer_id, question_id) 
) ENGINE=InnoDB 
ROW_FORMAT=COMPRESSED 
KEY_BLOCK_SIZE=4; 
+0

我的印象是MyISAM比InnoDB快得多。 InnoDB是否提供全文搜索功能?如果速度可比,我寧願使用InnoDB,因爲它也支持外鍵。 – 2010-09-30 21:17:54

+0

有與表引擎的不同之處。如果你可以正確地設計模式,你可以從InnoDB中獲得很好的性能。當然,這取決於你的規模以及你是如何限制I/O的。如果您使用InnoDB,則必須設置單獨的關鍵字索引,因爲它沒有全文索引。 – 2010-09-30 23:08:01

0

也許可以僥倖逃脫中等大小的文本字段,但總體上更好的儲存在一個單獨的表大油田。