Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

टेक्स्ट के साथ वर्चर कॉलम को अपडेट करने का सबसे तेज़ तरीका

यह "सबसे तेज़" के बारे में एक प्रश्न है, इसलिए समय नीचे दिया गया है

परीक्षण सेटअप,>1 मिलियन पंक्तियों वाली तालिका

create table MetaDataServe (id int identity primary key, vc varchar(max));

insert MetaDataServe values
('MindWorks.Accounts'),
('MindWorks.Transactions'),
('MindWorks.Commissions');

insert MetaDataServe
select vc
from MetaDataServe, master..spt_values a, master..spt_values b
where b.number between 1 and 30
-- (1090110 row(s) affected)

सामान बनाम बदलें बनाम सबस्ट्रिंग

प्रदर्शन सारांश - सामग्री> सबस्ट्रिंग> बदलें

update MetaDataServe set vc = STUFF(vc, 9, 0, '.Client')

(परिवर्तनशीलता दिखाने के लिए 2 बार कई निष्पादन से हैं, यह काफी कम है इसलिए समय को 3% के भीतर सटीक माना जा सकता है)

update MetaDataServe set vc = REPLACE(vc, '.', '.Client.')
update MetaDataServe set vc = 'MindWorks.Client.' + SUBSTRING(vc, 11, 100)

निश्चित संख्या बनाम PATINDEX बनाम CHARINDEX

(निश्चित स्थिति संस्करण पहले से ही ऊपर दिया गया है)
प्रदर्शन सारांश - FIXED> (PATINDEX =CHARINDEX)
<उप>

update MetaDataServe set vc = STUFF(vc, PATINDEX('%.%',vc), 0, '.Client')
update MetaDataServe set vc = STUFF(vc, CHARINDEX('.',vc), 0, '.Client')

नोट:

  • ऊपर दिए गए सभी अपडेट स्टेटमेंट आपकी आवश्यकताओं के आधार पर (एक या दो बदलाव के साथ) काम करेंगे
  • प्रत्येक परीक्षण से पहले, कैशिंग समस्याओं को रोकने के लिए पूरी तालिका को गिरा दिया जाता है और फिर से बनाया जाता है

सावधानी!

भले ही STUFF तेज है, आप मुश्किल परिस्थितियों में पड़ सकते हैं। अगर आपके डेटा में शामिल हैं

"MindWorksNoDot"

और आप

. का उपयोग करके अपडेट करते हैं
update MetaDataServe set vc = STUFF(vc, CHARINDEX('.',vc), 0, '.Client')

आप NULL के साथ समाप्त होते हैं! क्योंकि जब CHARINDEX को डॉट नहीं मिल रहा है, तो शून्य (0) के STUFF का दूसरा पैरामीटर पूरे स्ट्रिंग को NULL पर जाने का कारण बनता है। ।

अंतिम शब्द

सुरक्षा और विश्वसनीयता के लिए, यह देखते हुए कि यह STUFF दृष्टिकोण से केवल 33% धीमा है, मैं बस एक REPLACE कथन का उपयोग करूंगा, अर्थात

update MetaDataServe set vc = REPLACE(vc, '.', '.Client.')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल सर्वर में मूल्यों में रिक्त स्थान की संख्या की गणना करें

  2. SQL सर्वर 2008 टाइमस्टैम्प डेटा प्रकार

  3. टेबल-वैल्यूड-फ़ंक्शन के अंदर सीटीई के लिए मैक्सरेकर्सन विकल्प कैसे सेट करें?

  4. SQL सर्वर (T-SQL) में CURRENT_TIMESTAMP उदाहरण

  5. SQL सर्वर पर VMware CPU हॉट प्लग vNUMA प्रभाव