【问题标题】:How do I get LinqToSql to pass “index hints” to sql server?如何让 LinqToSql 将“索引提示”传递给 sql server?
【发布时间】:2010-05-05 15:32:09
【问题描述】:

由于我们不能信任我们的客户更新 sql server 中的索引统计信息等,我们过去不得不使用index hints。 (由于我们的一些客户还在使用 Sql Server 2000,我们也不能依赖更高版本的 Sql Server 中更好的查询优化器)。

那么在使用 LinqToSql 构建查询而不是原始 Sql 时如何传入索引提示?

【问题讨论】:

  • 为什么他们需要更新统计数据?您应该让它们自动更新 - 并且可以在每个周末轻松运行更新脚本。 20 年来,我从未遇到过统计更新问题。
  • 我必须同意@TomTom 的观点......这并不是索引提示旨在解决的问题,我认为你会获得更好的里程数通过自动更新(默认启用)或通过运行UPDATE STATISTICSsp_updatestats 的自己的后台进程来强制更新统计信息(如果您担心它们会关闭自动更新)。跨度>
  • @Tom,系统需要24*7运行,所以“更新脚本”等很难达成一致,我不知道安装系统的人是否明白什么他们是。数据不足统计的问题可能只是一个“老太太的故事”,但当我问为什么要使用“索引提示”时,有人告诉我这个问题。我可能会在不使用任何索引提示的情况下逃脱,但我会尽力掩盖我的基础野兔。
  • 为什么? SQL Server Enterprise(在 24/7 场景中唯一可用的,因为它具有所有出色的高可用性功能)支持在不中断的情况下重新生成索引;)
  • @TomTom 好笑!不是每个人都有 15,000 美元,尤其是使用 Linq2Sql 的人 ;-)

标签: .net sql-server linq-to-sql


【解决方案1】:

这不受支持,您对查询的唯一选择是设置事务隔离级别,但这对解决此问题没有帮助。

我会推荐两种行动方案之一,这是您真正需要做的事情。

  1. 您可以编写一个存储过程并在您的过程中处理它,然后使用 LINQ 来调用它....

  2. 从 LINQ 迁移到 SQL

就个人而言,如果确实有必要,我会推荐选项二。如果事实上您必须对数据库调用采取这种级别的操作/控制,那么自动生成的 SQL 在以后也会给您带来问题。

【讨论】:

    【解决方案2】:

    很遗憾,这是不可能的。您唯一能做的就是影响事务隔离级别。查看here 的示例。

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2014-11-23
      相关资源
      最近更新 更多