Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何优化以下T-SQL查询_Sql Server_Tsql - Fatal编程技术网

Sql server 如何优化以下T-SQL查询

Sql server 如何优化以下T-SQL查询,sql-server,tsql,Sql Server,Tsql,这是我的sqlquery SELECT MIN(CompletedDate), MAX(CompletedDate) FROM dbo.FactTable WHERE IdColumn IN ('guid1','guid2','guid3', 'guid4') AND NameColumn1 IN (N'150 comma seperated names') AND NameColumn2 = ('name') 针对数据仓库中只有140万条记录

这是我的
sql
query

SELECT MIN(CompletedDate), MAX(CompletedDate) FROM dbo.FactTable
        WHERE IdColumn IN ('guid1','guid2','guid3', 'guid4')
        AND NameColumn1 IN (N'150 comma seperated names')
        AND NameColumn2 = ('name') 
针对数据仓库中只有140万条记录的事实表执行。在我的本地机器上完成需要9秒钟。CompletedDate列可以使用非聚集索引和大量空值为空。我需要知道是否可以用更少的执行时间进一步优化它


我建议使用table变量来保存可能的
NameColumn1
值:

DECLARE @Names TABLE (NAME VARCHAR(255) PRIMARY KEY)

INSERT INTO @Names (NAME)
     SELECT spt.col
     FROM dbo.splitvalue(@name, ',') spt

SELECT . . .
FROM dbo.FactTable ft
WHERE IdColumn IN ('guid1','guid2','guid3', 'guid4') AND 
      NameColumn2 = 'name' AND
      EXISTS (SELECT 1 FROM @Names N WHERE N.NAME = ft.NameColumn1);

为表中的CompletedDate列创建覆盖索引

Create Index IDX on TableName (col1,col2) Then Rewrite that as

Create Index IDX on TableName (col1,col2) Include (CompletedDate). 

这样,您的键查找将被删除。

我认为您需要一个覆盖索引。这不应该是('guid1'、'guid2'、'guid3'、'guid4')中的
?表FactTable上的所有索引基本上都是什么-键查找不好。您希望使用一个包含所有相关列的索引。SQL Server不应该在中的
中处理150个值(远不是这样),但您最好在此时使用一个临时表/表变量和一个
联接
;除了可读性,我们的事实表有40列。最终用户将设计具有不同列组合的仪表板,而dev express可视化工具将生成不同的查询。最好是跟踪所有查询并考虑覆盖索引每Quy您可以添加最多16列在覆盖索引。谢谢。这很有帮助。因此,如果我在我创建的索引的include部分中再添加15列,它还应该优化包含这15列的其他查询