这更多是关于查询的性能和速度以及它们如何在关系数据库中工作的理论问题。
假设我有一个包含100,000行的表,其中有一个名为status的列。
10,000的状态为“有效”,而90,000的状态为“无效”。
如果我使用!='active'查询。我真的只是默认查询活动行吗?或者它仍然需要“扫描”所有行
我的意思是,性能会受到影响,具体取决于我所处的非活动行数。
例如....如果我有10,000,000行无效,10,000有效。活动行上的查询是否会花费相同的时间(我有100,000个非活动,或者10,000,000个非活动),因为我通过!='活动'查询丢弃了10,000,000个非活动行。
希望我能正确解释自己。
基本上我问的是活动行数是否保持不变,查询是否总是花费相同的时间,因为我并没有真正“看”非活动状态。
答案 0 :(得分:1)
假设您的标记未编入索引,则数据库别无选择,只能扫描每一行并检查状态。对于您应用的测试,它没有显着差异,因此查询将花费相同的时间。
如果您已将索引编入索引,那么数据库将决定是使用索引还是根据自己的系统性能统计信息进行表扫描,以及它可能选择的行数估计值。它会选择它认为最快的方法。确切的查询(有效或无效)可能会有所不同,但它不太可能有意义。
答案 1 :(得分:0)
这取决于确切的数据库引擎,更多地取决于您选择的索引(和索引类型)。
例如,如果位图索引可用,它可能会提供或多或少的性能,具体取决于数据的传播等。