以下SQL查询在生产中执行的时间超过5:19分钟。此SQL是从服务器端C#代码动态生成的,并且需要很长时间才能为少数客户端执行。由于生产时间很长,Web服务正在超时。您能否优化此SQL以提高性能?
这是动态生成的查询 -
-9.8
答案 0 :(得分:1)
这不是一个查询。这是四个查询。
日期比较看起来很危险。它们仅适用于某些语言设置。生成查询的代码应该是固定的。
关于第二个查询:是否将使用索引IX_TepmBase_Audit_Date
,取决于DBMS是否认为日期条件足够有限。我认为大多数记录符合条件,所以让我们希望DBMS不使用索引。也许Action
上的索引会有所帮助,因为我们正在寻找以特定字符串开头的所有操作。
在第三个查询中,您按t.id
进行分区。不应该id
是表格的唯一列;主键可能吗?分区看起来没有意义,Rank
总是1.然后查询包含一个非相关的NOT EXISTS
子句。所有记录的条件都为true或false。这很可能是一个错误。
要使第四个查询快速运行,您需要#TepmBaseExtend(id)
上的索引。以及派生表的另一个索引。也许在#TepmBaseExtend(Business_Date, Market_Value, Fund_Unique_Identifier)
。不知道你的数据,我不确定哪个索引完全正确,但那可能有效。