【问题标题】:SQL Server select query lock insert. Why?SQL Server 选择查询锁定插入。为什么?
【发布时间】:2016-04-22 15:33:10
【问题描述】:

我在 SQL Server 2008 R2 上执行了两个没有显式事务的 SQL 选择查询

查询 1:

SELECT * 
FROM MyTable 
WHERE Field1 = 'XXX' AND Field2 = 'YYY'

查询 2:

SELECT * 
FROM MyTable 
WHERE Field1 = N'XXX' AND Field2 = N'YYY'

“查询 2”比“查询 1”快,但在“查询 2”运行时,我无法在“MyTable”上写入 (INSERT) 新记录...“MyTable”似乎已锁定。相反,在“查询 1”运行时,我可以悄悄地添加新记录。

注意:“MyTable”有一个聚集的复合键(两列)和其他索引。

您能解释一下为什么会出现这种行为吗?

谢谢。

【问题讨论】:

  • 您的默认隔离级别是多少? DBCC useroptions;
  • 它是“已提交读”
  • 查询 1 和查询 2 返回的行数是否相同?
  • 是...都是同一个查询,只是改变参数赋值的方式。
  • @Luca Petrini,你找到解释了吗?

标签: sql sql-server performance isolation-level


【解决方案1】:

使用 ALTER/CREATE INDEX 的 ALLOW_PAGE_LOCKS 子句:

ALTER INDEX indexname ON tablename SET (ALLOW_PAGE_LOCKS = OFF);

【讨论】:

  • 我测试了您的解决方案,但没有任何结果......无论如何,原因是存在索引......如果我删除它们,我不再有问题,但性能下降。我正在调查。
猜你喜欢
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多