Ada*_*han 16 mysql database database-design innodb
我正在学习数据库的数据类型的用法.
例如:
为什么我要特别提到innodb?
除非您使用InnoDB表类型(请参阅第11章"高级MySQL"以获取更多信息),否则CHAR列的访问速度比VARCHAR快.
Joh*_*hnB 15
简要总结:
(只是我的意见)
VARCHAR(255)VARCHAR(100)或VARCHAR(255)INT(除非你计划在你的系统中超过20亿用户)INT或者VARCHAR或者CHAR(取决于您是否要存储格式)TEXTDATE或DATETIME(绝对包括帖子或电子邮件等内容的时间)DECIMAL(11,2)至于使用InnoDB,因为VARCHAR它应该更快,我不会担心,或一般的速度.使用InnoDB是因为您需要执行事务和/或您希望使用外键约束(FK)来保证数据完整性.此外,InnoDB使用行级锁定,而MyISAM仅使用表级锁定.因此,InnoDB可以比MyISAM更好地处理更高级别的并发性.使用MyISAM来使用全文索引,并减少开销.
更重要的是速度比引擎类型:将索引放在需要快速搜索的列上.始终将索引放在ID/PK列上,例如我提到的id_username.
更多细节:
这里有一堆关于MySQL数据类型和数据库设计的问题(警告,比你要求的更多):
关于何时使用InnoDB引擎的几个问题:
我只是tinyint用于几乎所有事情(认真).
编辑 - 如何存储"帖子:"
以下是一些更详细的链接,但这里是简短版本.对于存储"帖子",您需要一个长文本字符串的空间. CHAR最大长度是255,所以这不是一个选项,当然CHAR会浪费未使用的字符VARCHAR,而不是长度可变CHAR.
在MySQL 5.0.3之前,VARCHAR最大长度为255,因此您将继续使用TEXT.但是,在较新版本的MySQL中,您可以使用VARCHAR或TEXT.选择取决于偏好,但有一些差异. VARCHAR和TEXT最大长度现在都是65,535,但您可以设置自己的最大值VARCHAR.假设您认为您的帖子最多只需要2000,您可以设置VARCHAR(2000).如果你们每个人都遇到了极限,那么你可以ALTER在以后的桌子上使用它VARCHAR(3000).另一方面,TEXT实际上将其数据存储在BLOB(1)中.我听说,有可能是之间的性能差异VARCHAR和TEXT,但我没有看到任何证据,所以你可能想要进一步研究,但你可以在将来改变那个细微的细节.
更重要的是,使用全文索引而不是LIKE更快地搜索此"发布"列(2).但是,您必须使用MyISAM引擎才能使用全文索引,因为InnoDB不支持它.在MySQL数据库中,每个表都可以有异构的引擎组合,因此您只需要使用MyISAM使"posts"表成为可能.但是,如果您绝对需要"帖子"来使用InnoDB(用于交易),那么设置一个触发器来更新"posts"表的MyISAM副本,并使用MyISAM副本进行所有全文搜索.
请参阅底部的一些有用的引用.
(3)"VARCHAR列中的值是可变长度字符串.长度可以指定为MySQL 5.0.3之前的0到255之间的值,5.0.3及更高版本中的0到65,535之间的值.
在MySQL 5.0.3之前,如果需要不删除尾随空格的数据类型,请考虑使用BLOB或TEXT类型.
存储CHAR值时,将它们右对齐,并使用指定长度的空格.检索CHAR值时,将删除尾随空格.
在MySQL 5.0.3之前,当存储到VARCHAR列中时,会从值中删除尾随空格; 这意味着检索到的值也没有空格."
最后,这里有一篇关于VARCHAR与TEXT的优缺点的文章.它还谈到了性能问题:
| 归档时间: |
|
| 查看次数: |
3198 次 |
| 最近记录: |