数据库查询select with子句

[SQL]提升查詢效率與避免LOCK發生

要提升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 

    
因為SQL Server 會執行對應的鎖定一致性檢查。
    
欲改善整體資料庫查詢的效能,請將WITH (NOLOCK)加在您的SELECT語法中Table名稱的後面,雖然(NOLOCK)也可以,但是微軟還是建議大家要加WITH
    
除了簡單的SELECT之外,有JOIN SELECT語法也是可以使用的。但是DELETEINSERTUPDATE這些需要transaction的指令就不行了

   
有些文件說,加了WITH (NOLOCK)SQL查詢效率可以增加33%

   
加了WITH (NOLOCK)即告訴SQL Server,我們的這段SELECT指令無需去考慮目前tabletransaction lock狀態,因此效能上會有明顯的提升,而且資料庫系統的Lock現象會有明顯的減少(包含Dead Lock)

   
有一點要特別注意,因為WITH (NOLOCK)不考慮目前tabletransaction lock,因此當有某些資料正處於多個phase交易(例如跨多個tabletransaction交易-->如提款系統)
WITH (NOLOCK)
會讓目前處理交易process的資料被忽略

   
講白話一點,也就是說當使用NoLock時,它允許閱讀那些已經修改但是還沒有交易完成的資料。因此如果有需要考量transaction交易資料的即時完整性時,使用WITH (NOLOCK)就要好好考慮一下。

   
如果不需考量transactionWITH (NOLOCK)或許是個好用的參考。

1WITH ( < table_hint > )
指定由查詢最佳化器使用的資料表掃描、一或多個索引,

或由查詢最佳化器利用此資料表以及為此陳述式使用鎖定模式。

2WITH (NOLOCK)相當於 READ UNCOMMITTED



原文:http://blog.itpub.net/10640532/viewspace-521109/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值