【发布时间】:2017-01-11 09:34:22
【问题描述】:
我用 C# 编写了一个连接到 sql server 数据库速成版的应用程序,从前端我每隔几秒钟填充数据库中的特定表,并在该表中插入大约 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 秒,我相信这可以进一步优化,但不知道未来的路。
我对此的一个想法是创建另一个表并每天插入第一行和最后一行并从中获取数据。但是如果我可以在现有表和查询中做一些事情,我会避免同样的事情。
如果有人可以提供相同的输入,那将是非常可观的。
【问题讨论】:
-
为什么所有数据类型都是
decimal(19,5)?特别是对于Date_Time,这是个坏主意。
标签: c# sql-server database database-design query-performance