【发布时间】:2014-11-18 07:59:08
【问题描述】:
我有一个选择查询,它根据与其他表的一些连接检索大量数据,并且所有表都被其他进程使用(其中一些正在将数据写入这些表,而另一些正在从中检索)。同时进行的操作会锁定表。
在选择查询中有什么方法可以优化查询响应时间,即使表上有写/共享锁? "With (NOLOCK)" 可以带表帮助吗?
谢谢 马诺伊
【问题讨论】:
标签: sql sql-server locks
我有一个选择查询,它根据与其他表的一些连接检索大量数据,并且所有表都被其他进程使用(其中一些正在将数据写入这些表,而另一些正在从中检索)。同时进行的操作会锁定表。
在选择查询中有什么方法可以优化查询响应时间,即使表上有写/共享锁? "With (NOLOCK)" 可以带表帮助吗?
谢谢 马诺伊
【问题讨论】:
标签: sql sql-server locks
您也可以尝试这些选项
- 删除不必要的左连接
- 如果可以与内连接条件一起使用,则删除 where 子句
- 可以在您的列上创建索引
- 选择所需的列,避免对所有列使用 *
- 避免为您的列提供过长的长度
【讨论】:
With (NOLOCK) 会提高性能,但它会给你带来尚未提交的脏读。 理想情况下,不建议在事务表上这样做,如果您对这种脏读没问题,您可以使用它,
其他优化就像在连接中使用的表列上维护正确的索引。另一点是数据从小到大连接表,在select子句和where子句中调用函数。
希望对您有所帮助!
【讨论】: