例如,记录中有20个字段,其中包括20个字段中的5个索引字段。如果给定了适当的列索引,并且将使用索引字段检索数据。我想在下面讨论两种情况。从数据库检索字段或整个记录时花费多少成本
- 从记录
- 检索字段检索整个记录
我知道的唯一差别是,在情况1中,系统使用数据量小,所以它的较少花公交车辆。但是在检索时间方面,我不确定在这两种情况下硬件操作是否会有所不同,因为我认为无论有多少字段,在数据库上检索任务的主要成本都是查找记录。它是否正确?
例如,记录中有20个字段,其中包括20个字段中的5个索引字段。如果给定了适当的列索引,并且将使用索引字段检索数据。我想在下面讨论两种情况。从数据库检索字段或整个记录时花费多少成本
我知道的唯一差别是,在情况1中,系统使用数据量小,所以它的较少花公交车辆。但是在检索时间方面,我不确定在这两种情况下硬件操作是否会有所不同,因为我认为无论有多少字段,在数据库上检索任务的主要成本都是查找记录。它是否正确?
假设你从heap-based表中检索和您的WHERE子句是相同在两种情况下:
的情况是类似的,但对于clustered表稍微复杂一些,因为索引往往甚至覆盖PK字段时没有明确提及在CREATE INDEX,和表中的“主”部分不能(通常)被直接访问,但通过索引寻求。正如您已经注意到的那样,传输更多数据会给网络带宽带来更大的压力。
由于这些原因,总是试着选择你所需要的,而不是更多。
一个好的查询优化器会注意到并执行全表扫描,因为它更便宜,即使该指数是可用的。
为什么全表扫描更便宜? –
@MarcusThornton因为对索引进行扫描时,如果集群因子不好,会导致整个表堆堆积如此之多的“跳跃”,导致最终读取的页面数比表堆中的实际页数多得多(读取每个页面多次)。如果表格不够小,无法放入缓存,这一点尤其糟糕。 –
我得出结论。谢谢。 –
读取多个材料我来的结论:在执行查询时
谢谢!我认为我的问题和这个问题在这个环境中有点不同。在这种情况下,column1,column2,column3 ...都是这些字段,这意味着检索目标是相同的。但我想讨论的是从记录中检索一个字段,然后检索整个记录。检索目标不同。 –
这是**高**供应商特定。对于SQL Server,它总是以8k页的形式读写数据 - 所以即使你只是改变一个'BIT',你也会有8K被读取,8K被写入。 –
在建议的重复问题(涵盖索引等)方面,存在有价值和正确的建议。如果您需要选择来自单个索引的字段,那么DBMS可能会执行仅索引扫描,而不从表中提取数据行 - 由于I/O较少,速度会更快。如果你需要所有的数据,它通常需要从表中读取行(不会有索引覆盖所有列)以及用于加快查询的索引。如果你不需要所有的数据,那就值得尽量减少你选择的数据;它也需要时间来传输。 –