【发布时间】:2011-05-31 10:12:23
【问题描述】:
我有以下疑问:
SELECT
M.Col7,
M.Col8,
M.Col9,
M.Col10
FROM [MyTable] M
WHERE M.Col1 = COALESCE(@Col1, M.Col1)
AND M.Col2 = COALESCE(@Col2, M.Col2)
AND M.Col3 = COALESCE(@Col3,
M.Col3)
AND M.Col4 = COALESCE(@Col4,
M.Col4)
AND M.Col5 = COALESCE(@Col5,
M.Col5)
AND M.Col6 LIKE COALESCE(@Col6, M.Col6) +'%'
我在 col7,8,9,10 列上有一个组合的非聚集索引。如果我删除 where 子句,查询运行良好。但是,只要我放置 where 子句,查询就需要很长时间才能执行。我的表有 200 K 行。现在我正在考虑按 Col1、2、3、4、5、6 的顺序放置一个包含列的单个非聚集索引。我是否正确地加快了速度,或者什么应该是最好的选择?
【问题讨论】:
-
请添加表+键+索引定义...
-
那些
COALESCEs 可能会搞砸索引的任何使用。 -
那我该如何使用索引呢?我从外面得到@Col1、@Col2、@Col3,它们可以为空。
标签: sql-server sql-server-2005 sql-server-2008 indexing