这是我的表的结构,它存储机器的仪表读数。我需要保存所有的读数,以便我可以检索任何日期的读数,并验证任何新的读数。

我有一个关于AssetID的指数,ForDate在下降,所以最新的读数在顶部。
为这台桌子的机器找到最新的表读数太久了。我不想取消对机器的仪表读数的正常化,因为当两个或两个以上的人试图同时输入读数时,它会导致并发问题。
有什么建议可以让这件事更快吗?
编辑:这是我的LINQ2SQL查询
Dim res = From a In db.AssetMeterReadings Where _
a.AssetID = ast.AssetID And a.ForDate <= dAt.Date _
And a.isInactive = False _
Order By a.ForDate Descending, a.ApproximateReading Descending Take 1发布于 2013-09-16 06:58:31
您是否试图获取多个/全部AssetID的一行或最新条目?如果您试图查询许多不同资产的最新条目,那么索引对您没有多大帮助。
我建议你
IsLatestReading(bit)trigger for INSERT, UPDATE, DELETE以保持列IsLatestReading 只需小心递归触发器,它将导致
触发器类似于: update MyTable set IsLatestReading =0内连接删除on DELETE.AssetID = MyTable和IsLatestReading =1 update table MyTable set IsLatestReady =1 inner INSERTED.MeterReadingID = MyTable.MeterReadingIDcreate index on IsLatestReading DESC, AssetID, ForDate注意:如果您使用大容量插入来加载读数,您将不需要触发器,只需对列进行更新即可.
发布于 2013-09-16 04:09:48
我认为您需要运行一个性能分析器来了解您的查询是否真的使用了这个索引。您没有提到RDBMS是什么,但是在SQL-Server中,查询分析器中有一个“显示执行计划”选项。
有时,如果您有单独的列索引,例如Index1 ON AssetID,Index2 ON ForDate,则查询执行得更快。另外,我不认为你应该指定订单。试著看看个别索引是如何运作的。
https://stackoverflow.com/questions/18820032
复制相似问题