例如,一条记录有 20 个字段,其中包括 20 个字段中的 5 个索引字段。给定列上的正确索引已设置,并且将使用索引字段检索数据。我想讨论以下两种情况。
- 从记录中检索字段
- 检索整个记录
我知道的唯一区别是,在案例 1 中,系统使用的数据量很小,因此它在总线流量上的花费更少。但是在检索时间方面,我不确定这两种情况在硬件操作方面是否会有任何差异,因为我认为在数据库上检索任务的主要成本是找到记录,而不管有多少字段。这个对吗?
例如,一条记录有 20 个字段,其中包括 20 个字段中的 5 个索引字段。给定列上的正确索引已设置,并且将使用索引字段检索数据。我想讨论以下两种情况。
我知道的唯一区别是,在案例 1 中,系统使用的数据量很小,因此它在总线流量上的花费更少。但是在检索时间方面,我不确定这两种情况在硬件操作方面是否会有任何差异,因为我认为在数据库上检索任务的主要成本是找到记录,而不管有多少字段。这个对吗?
假设您正在从基于堆的表中检索,并且您的 WHERE 子句在两种情况下都是相同的:
对于聚簇表,情况类似但稍微复杂一些,因为即使在 CREATE INDEX 中没有明确提及,索引也倾向于覆盖 PK 字段,并且表的“主要”部分不能(通常)直接访问,而是通过索引查找.
最重要的是,正如您已经指出的那样,传输更多数据会给网络带宽带来更大压力。
由于这些原因,请始终尝试准确地选择您需要的东西,仅此而已。
1一个好的查询优化器会注意到这一点并执行全表扫描,因为它更便宜,即使索引可用。
阅读了一些材料,我得出了结论: