您好我有一个使用mysql的php网站,我有一个名为'Name'的列表。 我打算让它具有以下功能:
我的问题是,我应该将MyISAM或InnoDB用于此表吗?考虑到读取的频率/使用的内存量/互联网上针对varchar主键的警告数量,我的不那么长的varchar也可以用作主键吗?
但我真的想从InnoDB提供的foriegn-key约束中受益,或者我应该在php级别担心它?
我特别关注的是MyISAM的全文搜索功能。我试图阅读官方的mysql网页来了解它的用途,但未能理解足以判断我的情况是否会从中受益。
答案 0 :(得分:1)
简答:带有代理主键的InnoDB。
由于您打算将Name
列的表格包含多个子表格,因此如果您的数据需要使用INT UNSIGNED
(或甚至BIGINT UNSIGNED
),我建议您使用代理密钥)。这样,您的所有子表都不需要在其中包含Name
列,从而节省空间。
在InnoDB中,短主键是最佳选择,因为主键包含在所有二级索引中:http://dev.mysql.com/doc/refman/5.1/en/innodb-index-types.html
进行简单的FULLTEXT
匹配不需要 LIKE('%keyword%')
个索引。如果您对自然语言匹配感兴趣,他们会提供帮助,但您没有将其作为要求。