【问题标题】:Optimize select Query performance that is having join with various other tables in MS SQL优化与 MS SQL 中的各种其他表连接的 select Query 性能
【发布时间】:2014-11-18 07:59:08
【问题描述】:

我有一个选择查询,它根据与其他表的一些连接检索大量数据,并且所有表都被其他进程使用(其中一些正在将数据写入这些表,而另一些正在从中检索)。同时进行的操作会锁定表。

在选择查询中有什么方法可以优化查询响应时间,即使表上有写/共享锁? "With (NOLOCK)" 可以带表帮助吗?

谢谢 马诺伊

【问题讨论】:

    标签: sql sql-server locks


    【解决方案1】:

    您也可以尝试这些选项
    - 删除不必要的左连接
    - 如果可以与内连接条件一起使用,则删除 where 子句 - 可以在您的列上创建索引 - 选择所需的列,避免对所有列使用 * - 避免为您的列提供过长的长度

    【讨论】:

    • 感谢您的建议。我们能够找出问题和解决方案。
    【解决方案2】:

    With (NOLOCK) 会提高性能,但它会给你带来尚未提交的脏读。 理想情况下,不建议在事务表上这样做,如果您对这种脏读没问题,您可以使用它,

    其他优化就像在连接中使用的表列上维护正确的索引。另一点是数据从小到大连接表,在select子句和where子句中调用函数。

    希望对您有所帮助!

    【讨论】:

    • 其实NOLOCK不会只给他脏读,它可能会返回两次数据。 Nolock 还会在索引页面拆分期间忽略锁定。通常是一个很大的“不,永远不要使用它”,除了只读表。
    • 感谢 Saketh,我正在加入正确的 Indexes con 列。希望这会帮助我。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2018-02-18
    相关资源
    最近更新 更多