假设我在两个nvarchar列A和B上有一个非聚集索引。
如果我的查询看起来像这样:
SELECT Columns FROM Table WHERE A + B = '1234'
查询能否有效地使用索引?
或者我应该将where子句
中的列分开SELECT Columns FROM Table WHERE A = '12' AND B = '34'
我的测试结果令人惊讶。两者都产生了相同的查询计划,但成本不同。大多数情况下,连接查询会更快,但有时候,分离的版本会更快。
答案 0 :(得分:2)
应用于分栏符SARG
能力的任何表达式,函数,计算。主要公式如下:
column
operator
value
或
value
operator
column
。
列应该只是列名。运营商可以是=, >, <=, >=, between, like
。值可以是常量或任何表达式。
Like
应该像like 'AAA%_
一样。如果Like
为%AAA
或_AAA
,则SARG
无效。
所以答案是:如果你可以将你的谓词拆分为WHERE A = '12' AND B = '34'
,那么如果存在任何适当的话,这将使用索引。这个WHERE A + B = '1234'
不会使用索引。