如何使用 WHERE 子句优化 SQL 查询



我有一个非常简单的查询。

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 和索引<</p>

div class="one_answers">您可以

尝试创建一个仅包含 id> 200000 的条目的临时表,并查询该表以查看是否有任何区别:

SELECT * INTO #temp FROM logs WHERE id > 200000;
SELECT * FROM #temp WHERE description LIKE '%5488824%' ORDER BY id DESC;

看看这是否有效:

SELECT top 100 * from
(select description FROM logs  WHERE  ID > 200000 )  s
where s.description LIKE '%5488826%'  
ORDER BY s.id DESC  

我会尝试子查询第一个约束。根据您使用的数据库,您可以尝试如下操作:

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列上有索引。

非常简短的答案;-)向列添加索引。

最新更新