【发布时间】:2010-07-08 13:38:59
【问题描述】:
如标题所示。
我正在考虑使用单独的表与JOIN或使用单表,基本上我担心性能。
谢谢。
【问题讨论】:
如标题所示。
我正在考虑使用单独的表与JOIN或使用单表,基本上我担心性能。
谢谢。
【问题讨论】:
表中的总列数可能会极大地影响性能。宽表可能涉及为每一行加载大量数据,除非您小心地只带回每个查询中需要的列。
此外,表中的大量列可能表明存在设计缺陷和缺乏规范化。
如果您的索引设置正确,行数就不是问题。
【讨论】:
这称为vertical partitioning。如果您可以将不常用的列分离到它们自己的表中,它可以减少 I/O,但如果您的大多数查询最终加入表,则可能会增加开销。特别是如果两张表都在同一张光盘上。
【讨论】:
查询返回的列数会影响性能——建议只带回您需要的列。
出于其他原因(称为规范化),最好将重复的信息分成单独的表格 - 例如,如果您有工作的候选人,您不希望每个申请人的工作都有很多列- 你最好有一张申请人表、一张工作表和一张将两者联系起来的申请表。
拥有一个宽表可能本身也会影响性能,因为每条记录都更大,这意味着更多的磁盘会试图扫描表(这里有一些警告,它在很大程度上取决于使用的数据类型)
【讨论】:
不,列号也会影响性能。更多列意味着需要处理的数据更多。更多的列会影响驱动器上的布局,这可能会影响性能。
所有这一切在很大程度上取决于您的数据、查询以及您如何调整数据库和表(例如,根据您的查询进行适当的索引。
在您担心性能之前,请先使用您的实际数据和查询开始分析和测试,如果您只是猜测,您会猜错。
【讨论】:
如果您执行select *... 或尝试更新/插入一行并更改每一列,或者如果索引了许多列,那么一个非常宽的表(几十到几百列)肯定会导致性能问题。
【讨论】:
列号和行号都会影响性能。
如果您担心性能,您可能希望创建仅包含您用于连接的列的视图。另一种选择是创建索引,但仅在表不经常更新时才使用索引。
此外,除非您有超过 1000 条记录或超过 15 列,否则您不必担心性能。
【讨论】: