Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 Sql视图执行速度非常慢_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server Sql视图执行速度非常慢

Sql server Sql视图执行速度非常慢,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有这个sql视图 SELECT dbo.CustomFilterDetails.CustomFilterID, dbo.ItemCustomParameters.CustomFilterDetailsID, dbo.Item.ItemID FROM dbo.ItemCustomParameters INNER JOIN dbo.CustomFilterDetails ON dbo.ItemCustomParameters

我有这个sql视图

SELECT     
    dbo.CustomFilterDetails.CustomFilterID, 
    dbo.ItemCustomParameters.CustomFilterDetailsID, 
    dbo.Item.ItemID
FROM         
    dbo.ItemCustomParameters 
INNER JOIN
    dbo.CustomFilterDetails ON dbo.ItemCustomParameters.CustomFilterDetailsID = dbo.CustomFilterDetails.CustomFilterDetailsID 
INNER JOIN
    dbo.Item ON dbo.Item.ItemName LIKE dbo.ItemCustomParameters.Value 
INNER JOIN
    dbo.ItemParameter ON dbo.ItemParameter.ItemID IS NULL 
                      OR dbo.ItemParameter.Value LIKE dbo.ItemCustomParameters.Value 
                      OR dbo.ItemParameter.Name LIKE dbo.ItemCustomParameters.Name

为什么它工作得这么慢?

您不需要从视图中调用索引。索引用于对表中的数据进行排序,并将其存储在随时可用的位置。这对提高性能有很大帮助。只需创建索引并运行此视图,看看它是否会产生差异

您的问题在于此查询中的LIKE子句LIKE用于模式匹配,除非在所有要比较的列上定义了全文索引,否则不会使用针对这些列创建的任何索引。应改为使用“=”,并确保存在以下索引:

Item.ItemName
ItemParameter.Value
ItemParameter.Name
ItemCustomParameters.Value
ItemCustomParameters.Name 
我假设你已经有索引了

ItemCustomParameters.CustomFilterDetailsID
CustomFilterDetails.CustomFilterDetailsID
我假设您喜欢在其值中包含不同大小写的匹配?如果情况并非如此,那么将LIKE替换为=将已经解决您的问题。否则,请对相关字段使用不区分大小写的排序规则。然后,您可以使用=,将字符串与不同的大小写进行比较,而不会失去索引的好处:

ALTER TABLE Item ALTER COLUMN ItemName NVARCHAR(200) COLLATE LATIN1_GENERAL_CI_AS
ALTER TABLE ItemParameter ALTER COLUMN Name NVARCHAR(200) COLLATE LATIN1_GENERAL_CI_AS
ALTER TABLE ItemParameter ALTER COLUMN Value NVARCHAR(200) COLLATE LATIN1_GENERAL_CI_AS
。。。等等


然后将LIKEs替换为上面描述的=并创建索引,它应该可以正常工作,尽管仍然不理想。如果在此之后仍在遭受性能问题,请考虑使用整数键链接项目、ItMealPosits和ItEuthPopaPalter表。由于不了解您的数据库结构,我无法向您提供更多信息,但实际上,这意味着将项目与参数匹配的任务是在创建或分配参数时完成的,而不是每次调用视图时完成的。

可能是喜欢和or。或缺少索引。请尝试用WHERE子句替换JOIN子句。它应该更快。我们需要更多的信息来回答这个问题。表定义,索引,执行计划,等等,我试着这么做,它的效果是一样的,当我写=而不是像它只需要30个sAlso,你为什么要继续做
ColumnA-like-ColumnB
?,这与
ColumnA=ColumnB
…和多少时间是“慢工作”?