2010-01-05 16 views
8

मेरे पास निम्न चयन कथन है जो लगभग तुरंत समाप्त होता है। अद्यतन बयान लेखन की संख्या कम करने के अंत में शून्य करने के लिएअद्यतन एक से अधिक समय क्यों लेता है?

and InvoicesCharges.orderaccnumber <> Accountnumbersorders.accountnumber 

, यह:

declare @weekending varchar(6) 
set @weekending = 100103 

select InvoicesCharges.orderaccnumber, Accountnumbersorders.accountnumber 
from Accountnumbersorders, storeinformation, routeselecttable,InvoicesCharges, invoice 
where InvoicesCharges.pubid = Accountnumbersorders.publication 
and Accountnumbersorders.actype = 0 
and Accountnumbersorders.valuezone = 'none' 
and storeinformation.storeroutename = routeselecttable.istoreroutenumber 
and storeinformation.storenumber = invoice.store_number 
and InvoicesCharges.invoice_number = invoice.invoice_number 
and convert(varchar(6),Invoice.bill_to,12) = @weekending 

हालांकि, बराबर अद्यतन बयान 1m40s

declare @weekending varchar(6) 
set @weekending = 100103 
update InvoicesCharges 
set InvoicesCharges.orderaccnumber = Accountnumbersorders.accountnumber 
from Accountnumbersorders, storeinformation, routeselecttable,InvoicesCharges, invoice 
where InvoicesCharges.pubid = Accountnumbersorders.publication 
and Accountnumbersorders.actype = 0 
and dbo.Accountnumbersorders.valuezone = 'none' 
and storeinformation.storeroutename = routeselecttable.istoreroutenumber 
and storeinformation.storenumber = invoice.store_number 
and InvoicesCharges.invoice_number = invoice.invoice_number 
and convert(varchar(6),Invoice.bill_to,12) = @weekending 

लेता है यहां तक ​​कि अगर मैं जोड़ने एक ही समय लेता है।

क्या मैं यहां कुछ गलत कर रहा हूं? इतना बड़ा अंतर क्यों है?

+0

अतिरिक्त और खंड अभी भी एक अच्छा विचार है, 50,000 पंक्तियों को अपडेट क्यों करें जब आपको केवल 2 अपडेट करने की आवश्यकता हो? – HLGEM

उत्तर

21
  • लेनदेन लॉग फ़ाइल
  • सूचकांक अद्यतन
  • विदेशी कुंजी लुकअप
  • विदेशी कुंजी cascades
  • अनुक्रमित विचारों
  • अभिकलन कॉलम
  • जांच की कमी
  • ताले
  • लैच लिखते हैं
  • ताला वृद्धि
  • स्नैपशॉट अलगाव
  • डीबी
  • फ़ाइल विकास
  • अन्य प्रक्रियाओं को प्रतिबिंबित पढ़ने/
  • पेज विभाजन लेखन/अनुपयुक्त क्लस्टर सूचकांक
  • आगे सूचक/पंक्ति अतिप्रवाह घटनाओं
  • गरीब इंडेक्स
  • दिनांक
  • से बाहर आंकड़े
  • गरीब डिस्क लेआउट (जैसे सब कुछ के लिए एक बड़ा RAID)
  • UDFs कि तालिका पहुँच
  • के साथ चेक की कमी ...

हालांकि, हमेशा की तरह संदिग्ध एक ट्रिगर ...

है

इसके अलावा, आपकी हालत अतिरिक्त का कोई अर्थ नहीं है: SQL सर्वर को इसे अनदेखा करने के बारे में कैसे पता चलता है? अधिकांश सामान के साथ अभी भी एक अद्यतन उत्पन्न हुआ है ... यहां तक ​​कि ट्रिगर अभी भी आग लग जाएगा।ताले जबकि पंक्तियों उदाहरण के लिए अन्य स्थितियों के लिए खोज रहे हैं आयोजित किया जाना चाहिए

संपादित सितं, 2011 और फ़र, 2012 विकल्प

+2

हां, एक ट्रिगर कारण था। मैं इसके लिए नया हूं और "कोड" मेरा नहीं है। सर उठाने के लिए धन्यवाद। मैंने अतिरिक्त शर्त जोड़ा क्योंकि मैंने सोचा था कि डिस्क पर लिखने में बहुत लंबा समय लग सकता है, इसलिए डिस्क पर अनावश्यक लेखन नहीं थे। एक बार फिर, बहुत धन्यवाद। – Nodja

+0

+1। अच्छा उत्तर। –

+0

और विशेष रूप से ट्रिगर्स जो एक सेट-आधारित फैशन में चलाने की बजाए सभी पंक्तियों के माध्यम से कर्सर को "डिज़ाइन" कर रहे हैं! – HLGEM

1

क्योंकि पढ़ना इंडेक्स, ट्रिगर्स और आपके पास क्या प्रभाव नहीं डालता है?

6

अद्यतन तालिका में डेटा को लॉक और संशोधित करना है, और लेनदेन लॉग में परिवर्तन लॉग भी करना है। चयन में से किसी भी चीज को करने की ज़रूरत नहीं है।

+0

नाइटपिक: आप * एक चयन कथन में डीएमएल कर सकते हैं, यह अभी वापस लिखा नहीं गया है ... जब तक कि यह एक इंसर्ट नहीं है ... चुनें ... –

+1

और तालिका पर किसी भी अनुक्रमणिका को संशोधित करें। अधिक अनुक्रमणिका, लंबे समय तक लिखना। – womp

+0

तो अतिरिक्त स्थिति के साथ भी इसमें लंबा समय क्यों लगता है? टेबल में शून्य परिवर्तन होना चाहिए लेकिन इसमें अभी भी काफी समय लगता है। – Nodja

1

धीरे सर्वर या बड़े डेटाबेस मैं आमतौर पर अद्यतन विलंब का उपयोग के साथ, कि एक "तोड़" के लिए इंतजार कर रहा है डेटाबेस को अद्यतन करने के लिए।

संबंधित मुद्दे