सबसे पहले, मुझे बस इतना कहना है कि मैं PHP फ्रेमवर्क वाईआई का उपयोग कर रहा हूं, इसलिए यदि संभव हो तो मैं SQL कथन के परिभाषित सेट में रहना चाहता हूं। मुझे पता है कि मैं शायद एक बड़ा लंबा एसक्यूएल कथन बना सकता हूं जो सबकुछ करेगा, लेकिन मैं वहां नहीं जाऊंगा।MySQL में, क्या यह हटाने के लिए तेज़ है और फिर मौजूदा पंक्तियों को अपडेट करना तेज़ है या नहीं?
ठीक है, कल्पना करें कि मेरे पास एक टेबल उपयोगकर्ता और एक टेबल FavColors है। फिर मेरे पास एक ऐसा फॉर्म है जहां उपयोगकर्ता संभावित रंगों की एक बड़ी सूची से एक या अधिक चेकबॉक्स को चेक करके अपनी रंग वरीयताओं का चयन कर सकते हैं।
उन परिणामों को FavColors तालिका में कई पंक्तियों के रूप में संग्रहीत किया जाता है जैसे कि (आईडी, user_id, color_id)।
अब कल्पना करें कि उपयोगकर्ता अंदर जाता है और अपनी रंग वरीयता बदलता है। इस परिदृश्य में, डेटाबेस में नई रंग वरीयताओं को प्राप्त करने का सबसे प्रभावी तरीका क्या होगा?
विकल्प 1:
- एक जन सभी पंक्तियों जहां user_id
- तो सभी नए पंक्तियों की एक बड़े पैमाने पर डालने
विकल्प 2 कर से मेल खाता है की नष्ट कर सकता हूं:
- प्रत्येक सी के माध्यम से जाएं क्या बदल गया है यह देखने के लिए यूरेनेंट पंक्ति, और
- अपडेट करें यदि अधिक पंक्तियों को डालने की आवश्यकता है, तो ऐसा करें।
- यदि पंक्तियों को हटाने की आवश्यकता है, तो ऐसा करें।
मैं विकल्प एक तरह है क्योंकि यह केवल दो बयानों की आवश्यकता है, लेकिन कुछ सिर्फ एक पंक्ति सिर्फ करने के लिए संभावित रूप से वापस लगभग में ठीक उसी डेटा डाल हटाने के बारे में गलत लगता है। वहाँ भी करने के लिए आईडी ऑटो वेतन वृद्धि बनाने का मुद्दा है उच्च मूल्य अधिक तेज़ी से, और मुझे नहीं पता कि जब भी संभव हो उसे टालना चाहिए।
विकल्प 2 के लिए बहुत अधिक प्रोग्रामिंग कार्य की आवश्यकता होगी, लेकिन ऐसी स्थितियों को रोक देगा जहां मैं इसे फिर से बनाने के लिए एक पंक्ति को हटा दूंगा। हालांकि, PHP में अधिक लोड जोड़ना MySQL के लिए लोड में कमी के लायक नहीं हो सकता है।
किसी भी विचार? आप सब क्या करेंगे?
यदि कोई अनुक्रमित फ़ील्ड अपडेट कर रहा है, तो सूचकांक भी –
@OMG हाँ अपडेट किया गया है! इसका जिक्र करना भूल गए। अच्छा है कि आपने किया ... –
धन्यवाद, यह समझ में आता है। दुर्भाग्यवश, जब आप ActiveRecord के आधार पर एक फ्रेमवर्क का उपयोग कर रहे हैं, तो कस्टम एसक्यूएल कथन बनाने में हमेशा आसान नहीं होता है और "INSERT ... डिप्लिकेट कुंजी अपडेट" शामिल होता है। यदि मैं ऐसा करता हूं, तो मुझे मैन्युअल रूप से एक क्वेरी बनाना होगा, और यदि संभवतः मुझे भविष्य में डीबीएमएस स्विच करने की आवश्यकता है तो वह क्वेरी अनुवाद नहीं करेगी। –