我有一个三层系统。
Windows服务通常每分钟向Web服务发送一次请求,以查看它是否有任何要处理的内容。
如果跟踪数据库中的任何记录状态为已创建,则会触发此过程。
“状态”列有四个可能的值
我为此状态列创建了一个索引,其中包含INCLUDE列表中的必要详细信息,并且当状态为CREATED的记录时,该索引正常工作。
但是,如果没有“创建状态”的记录,则会导致该表中的大量逻辑读取。
当没有状态为CREATED的记录时,是否有任何减少逻辑读取次数的建议?
答案 0 :(得分:0)
听起来很少有记录,统计直方图确切地知道该范围内存在多少条记录。当记录为零且统计数据为最新时,直方图显示字符范围,而不是精确值,并使用确实存在的值的平均分布来猜测分配的供应值,以及平均分布。该表中的其他值可能非常大。我有兴趣看看如果你改变你的表定义以使用int作为状态然后fk' d到状态的查找表而不是直接在表中有varchar列,这会有什么反应。我怀疑int的直方图比varchar更适合你。我相当确定的另一个选择是使用" if / else"基于对表的行计数,它将直接从索引中提取,并在" else"阻止,当没有行时,"选择前0 ..."所以它仍然返回正确的模式,但没有实际工作。