0

这更多是关于查询的性能和速度以及它们如何在关系数据库中工作的理论问题。

假设我有一个包含 100,000 行的表,其中有一列称为状态。

10,000 的状态为“活动”,而 90,000 的状态为“不活动”。

如果我使用 !='active' 进行查询。那么我真的只默认查询活动行吗?还是它仍然需要“扫描”所有行

我的意思是,性能会受到影响,具体取决于我处于非活动状态的行数。

例如......如果我有 10,000,000 行不活动,10,000 行活动。对活动行的查询是否会花费相同的时间(无论我有 100,000 个不活动还是 10,000,000 个不活动),因为我通过 !='active' 查询“丢弃”了 10,000,000 个不活动行。

希望我能正确地解释自己。

基本上我问的是活动行数是否保持不变,查询是否总是花费相同的时间,因为我并没有真正“查看”非活动。

4

2 回答 2

1

假设您的标志没有被索引,数据库别无选择,只能扫描每一行并检查状态。您应用哪种测试不会有显着差异,因此查询将花费相同的时间。

如果你已经为你的标志建立了索引,那么数据库将根据它自己关于系统性能的统计信息以及它对可能选择的行数的估计来决定是使用索引还是进行表扫描。它会选择它认为最快的方法。确切的查询(活动或!非活动)可能会有所不同,但不太可能很重要。

于 2013-11-04T19:49:38.113 回答
0

这将取决于确切的数据库引擎,并且更多地取决于您选择的索引(和索引类型)。

例如,如果位图索引可用,它可能会提供或多或少的性能,具体取决于数据的传播等。

于 2013-11-04T19:45:58.673 回答