3

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

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

4

4 回答 4

3

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

SELECT * INTO #temp FROM logs WHERE id > 200000;

SELECT * FROM #temp WHERE description LIKE '%5488824%' ORDER BY id DESC;
于 2012-09-20T09:13:44.380 回答
0

看看这是否有效:

SELECT top 100 * from
(select description FROM logs  WHERE  ID > 200000 )  s
where s.description LIKE '%5488826%'  
ORDER BY s.id DESC  
于 2012-09-20T09:13:10.037 回答
0

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

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

或(对于 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列上有索引。

于 2012-09-20T09:15:47.287 回答
-1

非常简短的回答 ;-) 为列添加索引。

于 2012-09-20T09:13:48.763 回答