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

MySQL 5.0 अनुक्रमणिका - अद्वितीय बनाम गैर अद्वितीय

UNIQUE और PRIMARY KEY बाधाएं हैं , इंडेक्स नहीं। हालांकि अधिकांश डेटाबेस इंडेक्स का उपयोग करके इन बाधाओं को लागू करते हैं। इंडेक्स के अलावा बाधा का अतिरिक्त ओवरहेड महत्वहीन है, खासकर जब आप अनजाने में डुप्लिकेट को ट्रैक करने और उन्हें ठीक करने की लागत की गणना करते हैं (यदि नहीं तो) वे होते हैं।

इंडेक्स आमतौर पर अधिक प्रभावी होते हैं यदि आपके पास उच्च चयनात्मकता . है . यह विशिष्ट मानों की संख्या और पंक्तियों की कुल संख्या का अनुपात है।

उदाहरण के लिए, सामाजिक सुरक्षा संख्या के कॉलम में, आपके पास 1 मिलियन पंक्तियों के साथ 1 मिलियन अलग-अलग मान हो सकते हैं। तो चयनात्मकता 1000000/1000000 =1.0 है (हालांकि दुर्लभ ऐतिहासिक अपवाद हैं, एसएसएन का उद्देश्य अद्वितीय होना है)।

लेकिन उस तालिका में एक और कॉलम, "लिंग" में केवल 1 मिलियन पंक्तियों में दो अलग-अलग मान हो सकते हैं। 2/1000000 =बहुत कम चयनात्मकता।

UNIQUE या PRIMARY KEY बाधा वाले इंडेक्स में 1.0 की चयनात्मकता होने की गारंटी है, इसलिए यह हमेशा उतना ही प्रभावी रहेगा जितना कि एक इंडेक्स हो सकता है।

आपने प्राथमिक कुंजी और अद्वितीय बाधा के बीच अंतर के बारे में पूछा। मुख्य रूप से, यह है कि आपके पास प्रति तालिका केवल एक प्राथमिक कुंजी बाधा हो सकती है (भले ही उस बाधा की परिभाषा में एकाधिक कॉलम शामिल हों), जबकि आपके पास कई अद्वितीय बाधाएं हो सकती हैं। एक अद्वितीय बाधा वाला कॉलम एनयूएलएल की अनुमति दे सकता है, जबकि प्राथमिक कुंजी बाधाओं में कॉलम को एनयूएलएल की अनुमति नहीं देनी चाहिए। अन्यथा, प्राथमिक कुंजी और अद्वितीय उनके कार्यान्वयन और उनके उपयोग में बहुत समान हैं।

आपने एक टिप्पणी में पूछा कि क्या MyISAM या InnoDB का उपयोग करना है। MySQL में, वे स्टोरेज इंजन . शब्द का प्रयोग करते हैं . इन दो स्टोरेज इंजनों के बीच कई सूक्ष्म अंतर हैं, लेकिन इनमें से प्रमुख हैं:

  • InnoDB लेनदेन का समर्थन करता है, इसलिए आप वापस रोल करना या परिवर्तन करना चुन सकते हैं। MyISAM प्रभावी रूप से हमेशा स्वत:प्रतिबद्ध होता है।
  • InnoDB विदेशी कुंजी बाधाओं को लागू करता है। MyISAM विदेशी कुंजी बाधाओं को लागू या संग्रहीत नहीं करता है।

यदि ये सुविधाएँ आपके एप्लिकेशन में आवश्यक चीज़ें हैं, तो आपको InnoDB का उपयोग करना चाहिए।

आपकी टिप्पणी का जवाब देना इतना आसान नहीं है। InnoDB वास्तव में कुछ मामलों में MyISAM से तेज़ है, इसलिए यह इस बात पर निर्भर करता है कि आपके एप्लिकेशन के चयन, अपडेट, समवर्ती क्वेरी, इंडेक्स, बफर कॉन्फ़िगरेशन इत्यादि का मिश्रण क्या है।

देखें http:/ /www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ भंडारण इंजनों की बहुत गहन प्रदर्शन तुलना के लिए। InnoDB MyISAM पर इतनी बार जीतता है कि स्पष्ट रूप से यह कहना संभव नहीं है कि एक दूसरे की तुलना में तेज़ है।

अधिकांश प्रदर्शन-संबंधी प्रश्नों की तरह, इसका उत्तर देने का एकमात्र तरीका आपके आवेदन के लिए . है आपके एप्लिकेशन और डेटा के प्रतिनिधि नमूने का उपयोग करके दोनों कॉन्फ़िगरेशन का परीक्षण करना है, और परिणामों को मापना है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जहां कुछ समय से अधिक पुराना डेटाटाइम (उदा. 15 मिनट)

  2. Ubuntu 18.04 पर अजगर के लिए mysqlclient स्थापित करने में त्रुटि

  3. SQL क्वेरी से एप्लिकेशन कोड में बैकट्रैक?

  4. एक MySQL डेटाबेस से रिकॉर्ड खींचने का कैननिकल तरीका क्या है जिसमें कम से कम/सबसे बड़ा फ़ील्ड है?

  5. रिबूट के बाद XAMPP MySQL सेवा क्रैश