Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何优化netTiers数据访问性能?_Sql Server_Vb.net_.nettiers - Fatal编程技术网

Sql server 如何优化netTiers数据访问性能?

Sql server 如何优化netTiers数据访问性能?,sql-server,vb.net,.nettiers,Sql Server,Vb.net,.nettiers,我们的环境使用netTiers创建的类来访问MS SQL表,这些表是在VB.net应用程序中访问的 通过在选定的db列上添加“GetBy”方法,我成功地加快了几个查询的速度 但是,我已经为不使用键的数据访问创建了索引。例如,我按日期降序查询历史文件,速度相当慢。大约12秒的响应时间。我在该列上创建了一个索引,它没有给我任何性能提升 我对整个netTiers、数据类方法学相当陌生,不确定下一步该去哪里解决这个问题 下面是我如何访问数据的示例。它第一次到达hist时有很长的延迟。我相信它正在建立一个

我们的环境使用netTiers创建的类来访问MS SQL表,这些表是在VB.net应用程序中访问的

通过在选定的db列上添加“GetBy”方法,我成功地加快了几个查询的速度

但是,我已经为不使用键的数据访问创建了索引。例如,我按日期降序查询历史文件,速度相当慢。大约12秒的响应时间。我在该列上创建了一个索引,它没有给我任何性能提升

我对整个netTiers、数据类方法学相当陌生,不确定下一步该去哪里解决这个问题

下面是我如何访问数据的示例。它第一次到达hist时有很长的延迟。我相信它正在建立一个指数,但不应该是,因为已经有了一个指数

用于HistoryProviderService.GetAll().OrderByDescending(函数(x)x.ModifiedDateTime.ToList()中的每个hist
“和希斯特一起做事
下一个
这是索引的代码

将ANSI_填充设置为ON
去
在[Common].[History]上创建非聚集索引[IX_History_ModifiedDateTime]
([ModifiedDateTime]DESC,
[修改类型]ASC
)使用(PAD_INDEX=OFF,STATISTICS_norecocomputer=OFF,SORT_IN_TEMPDB=OFF,DROP_EXISTING=OFF,ONLINE=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)
在[小学]
去

非常感谢您提供的任何见解。

GetAll方法相当于“从历史中选择*”。没有任何指数能够加速这一进程

如果您需要历史记录表中的每一行,您可以尝试缓存它,甚至在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);
//使用动态查找方法,该方法将解析发送的简单字符串,并将其转换为参数化查询。此方法只能处理简单的约束,如equals。
new HistoryProviderService().Find(“ColumntToFilterby=ValueToConstrainTo”).OrderBy(。。。
//构建更复杂的筛选查询
var filter=new Namespace.Data.HistoryProviderQuery();
filter.AppendIn(HistoryProviderColumn.ColumntToFilterby,ValueCsvToConstrainTo.Split(',');
TList rows=new HistoryProviderService().Find(filter);
还可以选择为自己构建一个自定义存储过程,如果命名正确,netTiers将在HistoryProviderService中将其作为一个方法获取,并返回一个表行列表


重要的是要记住,您调用的第一个挂起*服务()的方法类将构建并执行一个SQL语句,您希望该语句在获取所需的所有数据时尽可能高效,但如果可能的话,不要获取一堆额外的数据。与实体框架等数据访问层不同,netTiers并不是围绕流畅的设计构建的;因此,第一种方法在过滤您的数据时非常重要查询。当实体框架出现在现场时,使netTiers更流畅的计划被取消了。

难道不是“通过ModifiedDateTime desc从历史顺序中选择*”吗?我原以为MS SQL仍然会使用索引,而不是构建临时索引。不,整个SQL调用都封装在GetAll方法中。orderby是Linq,在返回所有数据后在.net中运行。哦,好的,谢谢你的解释和建议。现在这很有意义。我真的更喜欢使用SQL statenetTiers具有自动生成数据库和面向对象编译时安全性的优点。如果重命名数据库中的表或列,代码将不会一代又一代地编译;如果只使用简单的sql语句,您永远不会知道,代码将结束这是netTiers的优势所在,它可以在客户端中断。但是,netTiers确实有一个sql字符串的传递选项:Provider.ExecuteNonQuery(System.Data.CommandType.Text,“sqlquery”)明确地说,我不建议使用ExecuteOnQuery来传递文本查询。这样做会绕过许多安全层。我唯一能想到自己编写原始sql查询的时间是,如果您试图为一个数据库编码,而该数据库的结构可能会发生变化。