gpt4 book ai didi

c# - 提高 SQL Server 表的查询性能包含 350 万行并且还在增长

转载 作者:搜寻专家 更新时间:2023-10-30 22:34:20 24 4
gpt4 key购买 nike

我用 C# 编写了一个连接到 sql server 数据库 express 版的应用程序,我从前端每隔几秒填充数据库中的特定表,并在此表中插入大约 200~300 行。

目前表包含大约 350 万行并且还在不断增长,表定义如下

[DEVICE_ID] [decimal](19, 5) NULL,
[METER_ID] [decimal](19, 5) NULL,
[DATE_TIME] [decimal](19, 5) NULL,
[COL1] [decimal](19, 5) NULL,
[COL2] [decimal](19, 5) NULL,
.
.
.
.
[COL25] [decimal](19, 5) NULL

我在 Date_Time 列上创建了非聚集索引,请注意,如果需要,我可以为此创建标识列(自动递增),但不存在唯一列,但我的报告生成逻辑完全基于 Date_Time 列。

我通常根据时间触发查询,即如果我需要计算月份期间 col1 中发生的变化。我将需要 Col1 的值在第一天的第一个值和一个月最后一天的最后一个值,就像我需要触发灵活日期的查询一样,我通常只需要基于 Date_Time 列的任何选择的开盘值和收盘值柱子。

要获取第一天的 col1 的第一个值,查询是

select top (1) COL1 from VALUEDATA where DeviceId=@DId and MeterId =@MId and Date_Time between @StartDateTime and @EndDateTime order by Date_Time

要获取最后一天的 col1 的最后一个值,查询是

select top (1) COL1 from VALUEDATA where DeviceId=@DId and MeterId =@MId and Date_Time between @StartDateTime and @EndDateTime order by Date_Time desc

但是当我触发上述查询时,它大约需要 20 到 30 秒,我相信这可以进一步优化,但不知道 future 的路。

我对此的一个想法是创建另一个表并每天插入第一行和最后一行并从中获取数据。但如果我可以在现有表和查询中做一些事情,我会避免同样的事情。

如果有人能提供相同的输入,我们将不胜感激。

最佳答案

要完全优化这些查询,您需要两个不同的多索引:

CREATE INDEX ix_valuedata_asc ON VALUEDATA (DeviceId, MeterId, Date_Time);
CREATE INDEX ix_valuedata_des ON VALUEDATA (DeviceId, MeterId, Date_Time DESC);

关于c# - 提高 SQL Server 表的查询性能包含 350 万行并且还在增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com