sql-server - 如何优化 netTiers 数据访问性能?
问题描述
我们的环境使用 netTiers 创建的类来访问在 VB.net 应用程序中访问的 MS SQL 表。
通过在选定的数据库列上添加“GetBy”方法,我成功地加快了几个查询。
但是,我为不使用键的数据访问创建了索引。例如,我正在按日期降序查询历史文件,而且速度很慢。大约 12 秒的响应时间。我在降序的列上创建了一个索引,它根本没有给我带来任何性能提升。
我对整个 netTiers、数据类方法比较陌生,不知道下一步该去哪里解决这个问题。
这是我如何访问数据的示例。第一次得到历史时有很长的延迟。我相信它正在建立一个索引,但它不应该是因为已经有一个索引。
For Each hist In HistoryProviderService.GetAll().OrderByDescending(Function(x) x.ModifiedDateTime).ToList()
' do stuff with hist
Next
这是索引的代码
SET ANSI_PADDING ON
GO
CREATE NONCLUSTERED INDEX [IX_History_ModifiedDateTime] ON [Common].[History]
( [ModifiedDateTime] DESC,
[ModificationType] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
非常感谢您提供的任何见解。
解决方案
GetAll 方法等价于:“Select * From History”。没有索引可以加快速度。
如果您需要历史表中的每一行,您可以尝试将其缓存起来,甚至为此目的在 netTiers 中内置了几个缓存功能。但是,如果您不需要该表中的所有数据,我建议您先过滤到您实际需要的数据。
以下是实现此目的的两个选项:
// use the dynamic find method that will parse the simple string you send in and turn it into a parameterized query. This method can only handle simple constraints like equals.
new HistoryProviderService().Find("ColumnToFilterBy=ValueToConstrainTo").OrderBy(...
// build a more complex filtering query
var filter = new Namespace.Data.HistoryProviderQuery();
filter.AppendIn(HistoryProviderColumn.ColumnToFilterBy, ValueCsvToConstrainTo.Split(',');
TList<HistoryProvider> rows = new HistoryProviderService().Find(filter);
还可以选择为自己构建一个自定义存储过程,如果命名正确,netTiers 会将其作为 HistoryProviderService 上的一个方法拾取并返回表行的 TList。
重要的是要记住,您在 *Service() 类中调用的第一个方法将构建并执行一条 SQL 语句,并且您希望该语句尽可能高效地获取您需要的所有数据,但不是如果可能的话,一堆额外的数据。与 Entity Framework 等数据访问层不同,netTiers 不是围绕流畅的设计构建的;所以第一种方法对于过滤查询非常重要。当 Entity Framework 出现时,让 netTiers 更流畅的计划被取消了。
推荐阅读
- angular - 如何以角度将方法从一个组件调用到另一个组件
- java - Java中char数组的选择排序
- javascript - 改进功能以突出显示所有类型的搜索词 - 反应原生
- visual-studio - 无法下载 Visual Studio 安装程序
- java - 线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:“3727284434”
- gnuplot - 避免在 gnuplot 中剪切轴编号
- excel - 使用 B 列中的 Excel 数据搜索网站;将搜索结果保存在 C 和 D 列中
- javascript - 如何仅在按下输入按钮时禁用表单提交
- python - 有什么好主意来衡量用户在队列中等待的时间吗?(Python)
- highcharts - HighStock 不绘制注释/注释离开视口?