在InnoDB数据库中,用于存储将被索引并且64个字符长的域名的字段可以是数据类型CHAR(64)或VARCHAR(64),其中第一个将填充数据,因此所有记录都相同长度。显然,这会在速度方面提供一些性能提升,但由于填充也会占用更多的磁盘空间。
理论上,并且没有进行任何基准测试,CHAR(36)确实能提供一些性能提升吗?
答案 0 :(得分:8)
最新版本的MySQL运行在21世纪的服务器上,大多数做这种工作的人建议*使用最适合您问题的数据类型。“使您的代码和数据易于阅读和易于理解!” / p>
为什么呢?因为MySQL的索引足够好,性能差异很小。只有当表变大(意味着大约10 ** 9行或更多)时,VARCHAR()和CHAR()之间的性能差异才会开始变得有意义。
花费宝贵的开发时间让您的应用程序足够好以至于您有机会吸引大量用户,这样会更聪明。当你拥有它们时,你可能会得到一个非常称职的数据库管理员来帮助你解决轻微的低效问题。
Topnotch服务器成本高达数千美元。能够进行真正紧密优化的开发人员需要花费数万美元。上市迟到需要花费数百万美元。保持简单,完成它!
答案 1 :(得分:0)
理论上,没有。
还有很多其他因素会对绩效产生更大的影响。 CHAR列不仅需要额外的“磁盘空间”,而且还需要更多的i / o(每个块的行数更少),innodb缓存的内存更多,写入innodb日志的数据更多(二进制日志记录),备份时间更长, 等等。 (它不仅仅是“磁盘空间”,它是从磁盘读取和写入所需的TIME,包括备份等。)
这并不是说您无法设置会对CHAR列产生轻微性能优势的测试。但该测试可能无法模拟您的实际工作量。
如果您存储的值总是64个字符,或接近64个字符,那么CHAR可能就是您的选择。但是,如果您存储的值通常短于64个字符,则使用VARCHAR。