如何优化他的SQL查询

时间:2019-07-15 09:53:46

标签: mysql sql tsql

问题是我们有一个名为[TblLogEntry]的表。每个日志数据都将写入此表中。查询需要太多时间才能执行(6秒)。

第二个问题是,该表属于第三方软件。我们创建了一个自己的Web界面以将数据上传/传输到该软件(该软件没有自己的Web界面)。我正在尝试查找文件(不是真正的文件,但是如果从查询中获得结果,那么我知道该文件已成功传输),在特定时间范围内,文本为“成功”。我有带通配符的LIKE表达式,您有想法重写吗?

我正在尝试检查文件是否成功上传。我只有这张桌子要检查。

编辑:在表达式之间更改为> =和<改进了执行。现在需要5秒^^

SELECT
[Text]
,[Date_Changed]
FROM [RM_ARCHIV].[dbo].[TblLogEntry]
where Date_Changed **>=** '2019-12-07 14:24:00' Date_Changed **<=** '2019-12-07 14:25:00'
AND [Text] like '%fdnpst-121422_mongo_Test_B_C001_S001.tif%'
AND [Text] like '%success%'; 

索引:

EXEC sp_helpindex '[RM_ARCHIV].[dbo].[TblLogEntry]' GO

结果: Indexes

如果查询为True,则只需要一个结果集,

感谢所有人!我必须找到另一个表来检查查询。

1 个答案:

答案 0 :(得分:0)

对于此查询:

SELECT [Text], [Date_Changed]
FROM [RM_ARCHIV].[dbo].[TblLogEntry]
WHERE Date_Changed BETWEEN '2019-12-07 14:24:00' AND '2019-12-07 14:25:00' AND
      [Text] like '%fdnpst-121422_mongo_Test_B_C001_S001.tif%' AND
      [Text] like '%success%'; 

您要在(Date_Changed, Text)上建立索引。这是查询的覆盖索引。这意味着索引可以满足查询,而无需引用原始数据页。

您正在从大约61秒的数据中选择数据,因此这应该非常快。然后可能会发生几件事。

如果Text真的很大(成千上万个字符或更大),则解析它可能会很昂贵。全文索引可能会有所帮助,但这会降低插入速度。

如果要插入许多行(每秒数十或数百行),那么即使61秒也可能是很多数据。这可能会降低查询速度。

并且,如果要插入很多行,那么数据库可能只是非常忙于锁定和插入,而为您的特定查询留下了很少的资源。