इस प्रश्न तक पहुंचने का सबसे अच्छा तरीका एक तालिका में 4 मिलियन रिकॉर्ड सम्मिलित करना है। वास्तव में, आप उन्हें एक दृश्य में "बल्क इंसर्टिंग" करके पहचान कॉलम वाली तालिका में रख सकते हैं।
create table TheIds (rownum int identity(1,1), id int);
create view v_TheIds (select id from TheIds);
bulk insert into v_TheIds . . .
डेटाबेस में सभी डेटा के साथ, अब आपके पास कई और विकल्प हैं। अपडेट आज़माएं:
update t
set booleanfield = 1
where exists (select 1 from TheIds where TheIds.id = t.id)
आपको TheIds(id)
. पर एक इंडेक्स भी बनाना चाहिए ।
यह एक बड़ा अद्यतन है, सभी एक लेन-देन के रूप में क्रियान्वित। इसका खराब प्रदर्शन प्रभाव हो सकता है और लॉग भरना शुरू हो सकता है। आप rownum
. का उपयोग करके इसे छोटे लेनदेन में तोड़ सकते हैं कॉलम:
update t
set booleanfield = 1
where exists (select 1 from TheIds where TheIds.id = t.id and TheIds.rownum < 1000)
यहां मौजूद क्लॉज left outer join
. के बराबर काम कर रहा है . मुख्य अंतर यह है कि यह सहसंबद्ध सबक्वेरी सिंटैक्स अन्य डेटाबेस में काम करना चाहिए, जहां अपडेट के साथ जुड़ना डेटाबेस-विशिष्ट है।
rownum
. के साथ कॉलम, आप अपडेट के लिए जितनी चाहें उतनी पंक्तियों का चयन कर सकते हैं। इसलिए, यदि समग्र अपडेट बहुत बड़ा है, तो आप अपडेट को लूप में रख सकते हैं:
where rownum < 100000
where rownum between 100000 and 199999
where rownum between 200000 and 299999
और इसी तरह। आपको ऐसा करने की ज़रूरत नहीं है, लेकिन अगर आप किसी कारण से अपडेट को बैच करना चाहते हैं तो आप ऐसा कर सकते हैं।
मुख्य विचार डेटाबेस में एक तालिका में आईडी की सूची प्राप्त करना है, ताकि आप बाद के संचालन के लिए डेटाबेस की शक्ति का उपयोग कर सकें।