- 浏览: 119520 次
- 性别:
- 来自: 深圳
文章分类
缺点:
1.会产生脏读
2.只适用与select查询语句
优点:
1.有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%。
2.可以用于inner join 语句
脏读: 一个用户对一个资源做了修改,此时另外一个用户正好读取了这条被修改的记录,然后,第一个用户放弃修改,数据回到修改之前,这两个不同的结果就是脏读。
详细内容:
要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑。其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环境中数据集被LOCK的现象藉此改善查询的效能。
不过有一点千万要注意的就是,WITH (NOLOCK)的SQL SELECT有可能会造成Dirty Read(脏读)。
例如:
SELECT COUNT(UserID)
FROM EMPLOYEE WITH (NOLOCK)
JOIN WORKING_GROUP WITH (NOLOCK)
ON EMPLOYEE.UserID = WORKING_GROUP.UserID
除了简单的SELECT之外,有JOIN的SELECT语法也是可以使用的。但是DELETE、INSERT、UPDATE这些需要transaction的指令就不行了…
有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%。
加了WITH (NOLOCK)即告诉SQL Server,我们的这段SELECT指令无需去考虑目前table的transaction lock状态,因此效能上会有明显的提升,而且数据库系统的Lock现象会有明显的减少(包含Dead Lock)。
有 一点要特别注意,因为WITH (NOLOCK)不考虑目前table的transaction lock,因此当有某些资料正处于多个phase交易(例如跨多个table的transaction交易-->如提款系统),WITH (NOLOCK)会让目前处理交易process的数据被忽略…
讲白话一点,也就是说当使用NoLock时,它允许阅读那些已经修改但是还没有交易完成的数据。因此如果有需要考虑transaction事务数据的实时完整性时,使用WITH (NOLOCK)就要好好考虑一下。
如果不需考虑transaction,WITH (NOLOCK)或许是个好用的参考。
注1:WITH ( < table_hint > )
指定由查询优化器使用的表扫描、一或多个索引,
或由查询优化器利用此数据表以及为此语句使用锁定模式。
注2:WITH (NOLOCK)相当于READ UNCOMMITTED
1.会产生脏读
2.只适用与select查询语句
优点:
1.有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%。
2.可以用于inner join 语句
脏读: 一个用户对一个资源做了修改,此时另外一个用户正好读取了这条被修改的记录,然后,第一个用户放弃修改,数据回到修改之前,这两个不同的结果就是脏读。
详细内容:
要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑。其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环境中数据集被LOCK的现象藉此改善查询的效能。
不过有一点千万要注意的就是,WITH (NOLOCK)的SQL SELECT有可能会造成Dirty Read(脏读)。
例如:
SELECT COUNT(UserID)
FROM EMPLOYEE WITH (NOLOCK)
JOIN WORKING_GROUP WITH (NOLOCK)
ON EMPLOYEE.UserID = WORKING_GROUP.UserID
除了简单的SELECT之外,有JOIN的SELECT语法也是可以使用的。但是DELETE、INSERT、UPDATE这些需要transaction的指令就不行了…
有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%。
加了WITH (NOLOCK)即告诉SQL Server,我们的这段SELECT指令无需去考虑目前table的transaction lock状态,因此效能上会有明显的提升,而且数据库系统的Lock现象会有明显的减少(包含Dead Lock)。
有 一点要特别注意,因为WITH (NOLOCK)不考虑目前table的transaction lock,因此当有某些资料正处于多个phase交易(例如跨多个table的transaction交易-->如提款系统),WITH (NOLOCK)会让目前处理交易process的数据被忽略…
讲白话一点,也就是说当使用NoLock时,它允许阅读那些已经修改但是还没有交易完成的数据。因此如果有需要考虑transaction事务数据的实时完整性时,使用WITH (NOLOCK)就要好好考虑一下。
如果不需考虑transaction,WITH (NOLOCK)或许是个好用的参考。
注1:WITH ( < table_hint > )
指定由查询优化器使用的表扫描、一或多个索引,
或由查询优化器利用此数据表以及为此语句使用锁定模式。
注2:WITH (NOLOCK)相当于READ UNCOMMITTED
发表评论
-
redis工具
2017-08-15 14:12 401介绍网站 http://www.cnblogs.com/s ... -
mysql in 子查询 效率慢 优化(转)
2016-03-22 15:33 546参考文档 http://www.cnblogs.com/xh8 ... -
Deadlock found when trying to get lock; try restarting transaction
2015-12-02 20:13 1133批量插入数据遇到异常 this.getJdbcTemplate ... -
关于批量插入数据之我见(100万级别的数据,mysql)
2015-11-27 14:27 1658http://blog.csdn.net/frinder/ar ... -
MySQL行级锁、表级锁、页级锁详细介绍
2015-11-18 23:55 1060数据库锁 http://www.jb51.net/artic ... -
Redis的三种启动方式
2015-07-15 15:38 479参考文档 http://www.tuicool.com/ar ... -
mysql 创建函数
2014-11-30 17:27 921如何进入mysql的cmd命令行模式? 参考:http://s ... -
cmd命令行登录MySQL的步骤
2014-11-30 17:06 1318先打开cmd窗口,怎么打开就不用说了吧,开始菜单运行-cmd回 ... -
创建带 IN 和 OUT 参数的 MySQL 存储过程
2014-10-24 15:37 672参考文献: http://www.oschina.net/tr ... -
sqlserver如何清除死锁?
2014-01-02 10:01 537Exec dbo.sp_lock begin de ... -
MS Sql Server 中主从库的配置和使用介绍-数据库备份
2013-11-14 11:52 1173博客链接地址: http://technet.microsof ... -
mysql 分库分表
2013-10-30 11:01 743分表是分散数据库压力的好方法。 分表,最直白的意思,就是将一 ... -
JDBC C3P0封装
2013-05-30 15:06 978c3p0 was designed to be butt-si ... -
文档-数据库函数-数据类型
2013-05-21 11:13 658SQL SERVER 2005数据类型,与函数大全文档 -
Northwind数据库Pubs数据库文件下载
2013-05-06 19:07 920Northwind数据库文件 Pubs数据库文件 -
SQL Server 2005 客户端程序 Management Studio
2013-03-30 19:15 722Microsoft SQL Server Management ... -
Oracle官方文档库
2013-01-16 23:25 938http://www.oracle.com/technetwo ... -
SQL Server分页3种方案比拼
2013-01-10 14:15 809此转载源自李洪根的blog.作者是微软的MVP!希望大家参考以 ... -
ORACLE数据库访问方式
2012-11-19 23:01 898isql*plus url: http://localhos ... -
设置mysql自增ID的起始值
2012-11-18 20:28 1952Hello! 如果觉得不错的话,并且不吝转载时, 请顺便添加上 ...
相关推荐
标题“EFCore.SqlServer.WithNoLock”涉及到的是在C#编程环境中使用Entity Framework Core(简称EF Core)与SQL Server数据库进行交互时,如何利用“WITH (NOLOCK)”提示来提高查询性能。这是一个针对数据库事务隔离...
缺点: 1.会产生脏读 2.只适用与select查询语句 优点: 1.有些文件说,加了WITH (NOLOCK)的SQL...其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环
在SQL Server中,`WITH (NOLOCK)`和`READPAST`是两种不同的事务隔离级别,它们用于处理并发控制和避免死锁问题。在处理数据库死锁时,这两个选项经常被推荐作为解决策略,但使用时需谨慎,因为它们可能会引入其他...
然而,除了索引优化,使用`WITH (NOLOCK)`或`NOLOCK`也可以帮助减少锁竞争,提升查询效率。在SQL命令中添加`WITH (NOLOCK)`,可以防止数据集在大量并发查询时被锁定,降低系统资源消耗,从而提高整体性能。 然而,`...
然而,如果在读取数据时使用了`WITH(NOLOCK)`这样的SQL提示符,那么可以实现无锁读取,这在大数据查询或低并发环境下可能是一个有效的优化策略。 无锁读取(NOLOCK)的使用需谨慎,因为它可能会读取到未提交的数据...
查询完成后,你不应该忘记手动关闭它们,除非使用`WITH NOLOCK`选项来避免自动锁定。如果表已经打开,`SELECT`会使用`USE ... AGAIN`重新打开。 `SELECT`子句允许你指定一系列返回的结果,包括: 1. 通配符`*`代表...
2. **使用WITH NOLOCK提示**:在SELECT查询中添加此提示,允许读取脏数据,但可能导致不一致的结果。这仅适用于无事务备份,且数据一致性不重要的情况。 3. **计划备份在低峰时段**:安排备份在系统负载较低的时候...
Another type of table lock is a schema stability lock (Sch-S) and is compatible with all table locks except the schema modification lock (Sch-M). The schema modification lock (Sch-M) is incompatible ...
使用WITH NOLOCK避免锁定问题。 - **查询数据**:SELECT语句是最基本的操作,结合WHERE、GROUP BY、HAVING、ORDER BY等子句进行复杂查询。 ### 五、事务与并发控制 - **事务**:事务是一系列数据库操作的集合,...
在执行任何删除操作前,最好先备份数据或使用`WITH NOLOCK`提示来创建一个只读的临时视图。同时,也可以考虑使用`ALTER TABLE ... ADD CONSTRAINT`来添加唯一约束,以防止未来数据的重复插入。 综上所述,删除SQL ...
在SQL Server中,数据操作是数据库...在执行这些操作前,最好备份数据,或者使用`WITH NOLOCK`等提示来避免锁定问题,同时理解它们对数据库性能的影响。在处理大量数据时,合理规划事务管理和错误处理也是十分必要的。
SELECT ca.code,ca.name,ca.ParentCode,az.name,az.latitude,az.longitude FROM CarArea ca WITH(NOLOCK) LEFT JOIN ( SELECT * FROM AreaZoon WITH(NOLOCK) WHERE parentCode='0' ) az ON az.proshortname=ca....
- **推荐做法**:使用`UNION ALL`代替`UNION`以提高合并效率,如`SELECT * FROM A WITH (NOLOCK) WHERE Verify = 3 UNION ALL SELECT * FROM A WITH (NOLOCK) WHERE Verify = 1`。 - **不推荐做法**:直接使用`UNION...
代码如下:–获取表的count信息select count(*) from T with(nolock) –获取特定值的count信息select count(*) from T with(nolock)where v = ‘–value’ –获取表’T’的count信息select count(*) from T with...
(SELECT MAX(row_count) FROM sys.dm_db_partition_stats p WITH(NOLOCK) WHERE p.object_id = t.object_id AND p.index_id ) AS Rows, (SELECT COUNT(1) FROM dbo.syscolumns WITH(NOLOCK) WHERE id = t.object_...
SELECT * FROM PbMatchineItem WITH (NOLOCK) WHERE ISNUMERIC(remarks) <> 0 -- 只取数字记录(小) SELECT * FROM PbMatchineItem WITH (NOLOCK) WHERE ISNUMERIC(remarks) = 0 -- 不取数字记录 ``` 这段代码展示了...
SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)
SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)