And*_*mar 11 sql sql-server indexing sql-server-2005
一个应用程序会导致我们的Sql Server 2005数据库负载过重.我们不控制运行此查询的应用程序每分钟一次:
select id,col1,col2,col3 from table where id != id
Run Code Online (Sandbox Code Playgroud)
注意id!= id,意味着行不等于它自己.不出所料,结果始终没有找到行.但是,每次运行此查询时,Sql Server都会执行聚簇索引扫描扫描!
id列定义为:
varchar(15) not null primary key
Run Code Online (Sandbox Code Playgroud)
查询计划显示"估计行数"的大量数字.有谁知道为什么Sql Server需要表扫描来找出明显的?
我会伪造这个问题...抽象出一个视图,并欺骗查询.
将现有表'table'重命名为'table_org'或其他内容,并创建如下视图:
CREATE VIEW table
AS
SELECT * FROM table_org
WHERE id='BOGUSKEY'
Run Code Online (Sandbox Code Playgroud)
现在,您应该通过主键上的表进行1次扫描,它应该(就像原始查询一样)找不到任何内容.该应用程序不知道更聪明...
阅读此处的答案和您的编辑后,让我总结一下您的选择:
这些都不是好的解决方案,但不幸的是,它们是您唯一拥有的解决方案。你必须选择一个,然后选择它。
我会首先尝试解决方案 2,它是执行时间最短的解决方案。
另一方面,如果该公司不愿意更改应用程序,那么我会采用解决方案 4。这是一个主要的性能错误,如果该公司不愿意或无法解决该问题,您必须问自己,下一个角落还潜藏着什么?