我有一个非常简单的查询。
SELECT top 100 *
FROM logs
WHERE description LIKE '%5488826%'
ORDER BY id DESC
但是它包含一个LIKE子句,它正在搜索较大的文本字段。
我知道该表只有(例如)200200行
(我只对找到行ID> 200000中发生的事情感兴趣)。
我尝试通过添加
来优化查询 SELECT top 100 *
FROM logs
WHERE ID > 200000
AND description LIKE '%5488826%'
ORDER BY id DESC
我的想法是SQL会首先运行ID > 200000
约束,这有助于加快查询速度,但仍然需要几分钟才能运行,我该怎么做才能让它运行得更快。
编辑: ID是PK并编入索引
答案 0 :(得分:3)
您可以尝试创建一个只包含ID为>的条目的临时表200000,并查询它是否有任何区别:
SELECT * INTO #temp FROM logs WHERE id > 200000;
SELECT * FROM #temp WHERE description LIKE '%5488824%' ORDER BY id DESC;
答案 1 :(得分:0)
看看是否有效:
SELECT top 100 * from
(select description FROM logs WHERE ID > 200000 ) s
where s.description LIKE '%5488826%'
ORDER BY s.id DESC
答案 2 :(得分:0)
我会尝试子查询第一个约束。取决于您使用的DB,您可以尝试类似:
SELECT TOP 100 * FROM (
SELECT ID, description FROM logs WHERE ID > 200000
) AS data
JOIN
logs
ON
logs.id = data.id
WHERE
data.description LIKE '%5488826%'
ORDER BY
ID DESC
OR(对于SQL Server - 使用CTE并读取未提交的提示):
;WITH data AS (
SELECT ID, description FROM logs WITH (NOLOCK) WHERE ID > 200000
)
SELECT
logs.*
FROM
data
JOIN
logs WITH (NOLOCK)
ON
logs.id = data.id
WHERE
data.description LIKE '%5488826%'
并确保您在id
列上有索引。
答案 3 :(得分:-1)
非常简短的答案;-)为列添加索引。