在 MySQL 中,这两个选项中哪一个会执行得更好?
a) 一行,有 5 个列,一个大 (50kb) 和 4 个小 (500b)。
b) 两行,一列 4 列,一列 1。
PHP 非常频繁地读取行,但只需要小列信息。
除非您实际上选择了大列,否则除了对查询产生一点影响之外,它不太可能产生任何影响。
如果记录中的小行不连续(多次磁盘读取以从数据部分获取列),或者它是用于提取数据的键的一部分(多次磁盘读取以提取关键),但与所有其他可能对性能产生的影响相比,这可能显得微不足道。
我的建议是遵循第三范式,只有在它变得明显时才担心性能(并且只有在它变得明显时——参见 YAGNI)。
如果大列自然是基于 3NF 的行的一部分,那通常是它应该去的地方,而不是单独的表。人为地将其放入单独的表中的问题是,您需要它的查询以及其他至少一个列将受到影响,因为您必须进行连接。
无论如何,如果您真的想知道解决方案 A 或 B 中哪个更快/更小/更好/更强/更优雅,您需要衡量而不是猜测(或询问我们)。
这涉及在可能的目标环境中尝试这两种解决方案并实际评估它们的性能。而且,最重要的是,如果您的数据和架构都没有改变,那么数据库调优只是一种设置和忘记的操作。这两者中的任何一个的变化都可能使您之前的基准测试变得无关紧要。