【发布时间】: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 表达式,里面有通配符,你有什么想法重写这个。
-
查询看起来不错,乍一看没有什么可优化的。 (最好只使用
>=和<进行日期时间比较。例如,您包括第二个分数 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