SQL中基于where条件的不同时间执行时间相同?我如何解决这个问题?

问题描述 投票:0回答:1

我的数据库有7M记录,有30多个变量,下面的查询是基于每天的数据过滤,我需要大约12分钟来返回结果。

select customername, productname from xyztable where (datatime between '2019-05-17 00:00:00.000'
and '2019-05-18 00:00:00.000')

同样的数据,我也需要根据每小时进行筛选,如下所示。

select customername, productname from xyztable where (datatime between '2019-05-17 00:00:00.000'
and '2019-05-17 01:00:00.000')

我以为每小时的查询结果会更快,因为数据会非常少。但是,它需要的时间和日查询的时间是一样的,所以基本上小时和日查询都需要12分钟才能返回结果。

所以基本上小时和日查询都需要12分钟才能返回结果。

有什么办法可以让小时查询的结果比日查询的结果返回得更快?

sql sql-server sql-execution-plan
1个回答
0
投票

如果没有执行计划,我只能假设有一个表扫描来读取数据。 你可以通过创建一个覆盖索引将其改为索引查找。

create index ix_MyIndexName
on xyztable (datatime)
include (customername, productname)

然后你的查询将查找datatime的第一个值,然后扫描到最后一条符合条件的记录。 由于自定义名称和产品名称包含在索引中,因此将不需要在计划中进行查找。


1
投票

这是因为你在字段 "datatime "上没有索引,所以SQL Server必须读取整个 "xyztable "来查找记录.尝试创建这个索引。

CREATE INDEX IX_datatime_xyztable ON xyztable(datatime)
© www.soinside.com 2019 - 2024. All rights reserved.