Sql server Sql视图执行速度非常慢
我有这个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
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
…和多少时间是“慢工作”?