2012-08-24 27 views
34

şey (nolock) ile situtation için tamamen uygun olduğu varsayımına dayanmaktadır. Orada (nolock) ile kullanılıp kullanılmayacağını tartışan çok fazla soru var.- Bir fark var mı?

Etrafa baktım ve with(nolock) kullanmak arasındaki gerçek fark olup olmadığını bulmak mümkün olmamıştır

:

select customer, zipcode from customers c with(nolock) 

ya da sadece (nolock):

select customer, zipcode from customers c (nolock) 

fonksiyonel var mıdır ikisi arasındaki fark? Üslup?
Diğerlerinden daha büyük ve kullanımdan kaldırılma şansı var mı?

+1

buraya bakın: http://stackoverflow.com/questions/1723910/syntax-for-nolock-in-sql – paul

+2

Onlar takma vardır. Ipucu başka bir seçenek ile belirtildiğinde, ipucu WITH anahtar sözcüğü ile belirtilmelidir: "TARAFINDAN (TABLO, INDEX (myindex))" http://msdn.microsoft.com/en-us/library/ms187373.aspx – edze

+1

Nolock ayrıca READUNCOMMITTED olarak da adlandırılabilir ve yalnızca SELECT deyimlerinde uygulanabilir. Tabloya karşı paylaşılan işlemlerin düzenlenemeyeceğini belirtir, bu da tablodaki verilerin değiştirilmesini engeller. Bu gönderiye bir göz atın http://www.sqlserverlogexplorer.com/difference-between-nolock-and-with-nolock/ –

cevap

45

hiçbir fonksiyonel bir fark yoktur, ama sonunda WITH olmadan sözdizimi çalışmaz. Bu kullanımdan kaldırıldı: için aşağıdaki konuyu ara

select customer, zipcode from customers c with (nolock) 

tablo ipuçları için WITH anahtar kelime kullanarak değil

en az SQL Server 2008 yılından bu yana kaldırıldı:

select customer, zipcode from customers c (nolock) 

Yani bu biçimi kullanarak olmalıdır ifade Specifying table hints without using the WITH keyword.: kullandığınız verilmemesi konusunda

http://msdn.microsoft.com/en-us/library/ms143729%28SQL.100%29.aspx

(Tartışmalar nolock, elbette, ayrıdır. I've blogged about them here.)

+0

Ne ile kullanacağınız ile ilgili olarak (nolock) ': http://stackoverflow.com/questions/686724/sql-ne zaman-kullanmalısınız-ile-nolock? rq = 1 – Rob

+1

@Rob ne zaman * NOLUĞU kullanmıyor * ne demek istiyorsun? :-) –

+0

@AaronBertrand Belirttiğiniz MSDN bağlantısı, NOLOCK'un yalnızca UPDATE ve DELETE deyimleri için kullanımdan kaldırıldığını gösterir. SELECT ifadeleri için kullanımdan kaldırılmış gibi görünmüyor. – Dono

3

Gerçekten, üzerinde bulunduğunuz SQL Server sürümüne bağlıdır.

WITH, SQL Server 2012 table hints için en son belgelerin onaylanması, kullanımdan kaldırılmış bir özelliktir. Yani from customers c (nolock) muhtemelen işe yarar; Eğer gerçekten bu from customers nolock farklı olduğunu from customers c WITH (nolock)

Not kullanarak olmalıdır; nolock masa takma adı olarak hizmet ederdi.

İşlevsel olarak; aynı görünüyorlar.

2

ancak ben sorgu yürütme planı yoluyla herhangi bir fark görmedik, bir 170000+ veri satır sonucu için bu denedik. Her ikisi de aynı şekilde çalışır.

+6

Bu bir yorum olmalı, cevap değil. İki yıldan beri, bir yıldan fazla bir süredir işlevsel bir farkın olmadığı belirtildi. – Leigh

+1

Bu adama bir ara ver ... –

+0

Planları küçük olmayan bir masada karşılaştırdığınızı bilmek çok güzel. Gelecekteki başvurular için kullanmakta olduğunuz SQL Server'ın hangi sürüm numarasını bilmenizde yardımcı olabilir. (+1 yine de) –

5

biz SQL Server 2000 sürümünde işe yaramaz (nolock) ile (nolock) arasındaki farkı ve (nolock) ile ... bulmuyorum rağmen.

Ve ayrıca '(nolock)', bağlı sunucular sadece veri çekme çalıştığınızda '(nolock) ile' kullanmalıdır oysa çalışmaz fark ettim.

-- this will not work 
select * from server1.DB1.dbo.table1 (nolock) 

-- this will work 
select * from server1.DB1.dbo.table1 with (nolock) 
+1

Gönderi için zaman ayırdığınız için teşekkür ederiz. Bu, yukarıdaki Aaron'un gönderisine bir yorum olmalı, ancak henüz yorum göndermek için itibarınızın olmadığını görebiliyorum. Yoluna çıkman için +1. – Rob

İlgili konular