我有一个非常简单的查询。
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是主键并已建立索引。
EXPLAIN
能给你什么信息?如果你真的有 200200 行,你会认为优化器确实会按照你的建议执行,这可能需要一秒钟左右的时间。(除非“相当大”意味着“兆字节”) - lc.ID
是聚集索引,我本来期望它只会反向扫描并在找到100个匹配行或达到ID范围的末尾时停止。也许延迟是由于其他原因(例如长时间开放事务的阻塞)造成的。 - Martin SmithLIKE '%....%'
会使SQL Server无法使用任何索引,(2)使用SELECT *
也意味着SQL Server很可能需要扫描整个聚集索引(基本上是一个表扫描)来获取你的数据。没有办法优化 这个 - 你需要重写这个查询语句。 - marc_s