我正在使用SQL Server 2016。我有一个超过1000万行的表。当我想用查询显示在这里搜索时,它非常慢。
CREATE TABLE dbo.table_name
(
Col1 int NOT NULL,
Col2 int NULL,
Col3 char(2) NULL,
Col4 char(15) NULL,
Col5 varchar(8) NULL,
Col6 varchar(12) NULL,
Col7 varchar(8) NULL,
Col8 int NULL,
Col9 int NULL,
Col10 varchar(16) NOT NULL
) ON PRIMARY
SELECT
colum3 + column4
FROM
tablename
WHERE
column3 + column4 = @variable
我应该使用什么索引方法来加快此查询的速度?(两列中的varchar类型)
3条答案
按热度按时间3qpi33ja1#
也许你可以考虑一个计算列和索引。
不确定单独列上的索引是否会有很大帮助,因为它仍然必须对每一对执行concat(认为
'Rhy' + 'thm'
与'R' + 'hythm'
相同)。nafvub8i2#
没有什么好方法可以做到这一点,但您有几个选择。
问题是查询必须连接数据库中每一行的col 3和col 4,并将其与变量进行比较。连接意味着它不会使用索引。执行此操作的时间将随行数线性增加。
首先,如果您在第3列和第4列上创建索引,并将查询更改为
您应该会在速度上得到相当大的改进。这是因为第一个where子句可以使用索引,并且 * 应该 * 减少查询必须连接col 3和col 4的行数。我建议使用@variable的前3个字符-调整到任何有效的字符。
第二种选择是创建一个视图,将column 3和column 4连接成一个新列,并对该列执行create an index,这 * 应该 * 非常快。
fslejnso3#
该模型表明Col3和Col4值的长度始终为2和15个字符。
如果是这种情况,您可以添加一个包含这两个列的索引,并在where子句中分别使用它们。
如何处理
Null
值仍有待解决。基于相同假设的解处理
Null
值。