【问题标题】:How can I optimize his sql query我怎样才能优化他的sql查询
【发布时间】:2019-11-24 00:15:41
【问题描述】:

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

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

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

编辑:将表达式之间更改为此 >= 和

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

如果查询为真,我只期望一个结果集,

谢谢大家!我必须找到另一个表来检查查询。

【问题讨论】:

  • 您的查询计划如何?你有什么索引?你能重写 LIKE 表达式不使用前缀 % 吗?
  • 第二个问题是,这个表属于第三方软件。我们创建了一个自己的 Web 界面来将数据上传/传输到该软件(该软件没有自己的 Web 界面)。我试图在特定时间范围之间找到一个带有“成功”文本的文件。我有 LIKE 表达式,里面有通配符,你有什么想法重写这个。
  • 查询看起来不错,乍一看没有什么可优化的。 (最好只使用 &gt;=&lt; 进行日期时间比较。例如,您包括第二个分数 14:25:00,0000 但不包括 14:25:00,0001,这可能是不希望的。)加速:在date_changed, text 上添加一个索引,如果不存在的话。
  • “此表属于第三方软件”是指您不能对其进行任何更改吗?还是您不愿意对其进行更改?表上是否有任何现有索引?请编写现有索引并将它们添加到您的问题中。
  • 这就是问题所在,我无法对其进行任何更改。使用此查询: EXEC sp_helpindex '[RM_ARCHIV].[dbo].[TblLogEntry]' GO 我得到了这个 index_name # index_description # index_keys ##################### ############################### IX_TblLogEntry_ID_Log 非集群位于 PRIMARY ID_Log PK_TblLogEntry 集群、唯一、主键位于 PRIMARY ID

标签: mysql sql tsql


【解决方案1】:

对于这个查询:

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 秒也可能是很多数据。这可能会减慢查询速度。

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

【讨论】:

  • 问题是在短时间内插入了很多行
  • @YavuzYilmaz 。 . .在这种情况下,您可能需要更大的服务器。
  • 谢谢 Gordon,我会和我们部门讨论这个话题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多