id value
1 Really really long value 1
2 Really really long value 1
3 Really really long value 1
…
1000 Really really long value 2
1001 Really really long value 2
1002 Really really long value 2
…
字符串 ,扫描此表需要很长时间,因为值很大。 规范化该表将得到以下给予结果:
id value
1 1
2 1
3 1
…
1000 2
1001 2
1002 2
…
val_id value
1 Really really long value 1
2 Really really long value 1
3条答案
按热度按时间hfsqlsce1#
即使在
PRIMARY KEY
上,JOIN
也需要几倍于顺序扫描的时间。当然,最好是看到table,但我有根据的猜测是,让他们在一起会更好。
如果要拆分的列很小且基数很高(有很多不同的值),则将其保留在表中。
但是,如果您所做的是规范化(而不仅仅是表拆分),那么规范化设计可以更快。
例如,如果你的数据看起来像这样:
字符串
,扫描此表需要很长时间,因为值很大。
规范化该表将得到以下给予结果:
型
扫描
4
字节整数的行要比扫描千字节整数的行快得多,即使有额外的JOIN
,第二种设计的查询也会更快地完成。pwuypxnk2#
我想这取决于数据库模式。如果只有小字段,方法A可能更好。但是如果有大字段可以放在不太使用的表中,那么按照方法B的建议将它们分开存储可能更有意义。
yhxst69z3#
你会拆分列以避免重复吗?如果是这样,你可能会看到简单查询的速度增加。但是,如果你有涉及复杂连接的查询,你可能会看到性能下降。这在很大程度上取决于你如何索引表。