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

मैसकल दो टेबल के बीच साधारण क्वेरी पर बहुत धीमा

InnoDB में प्रत्येक अनुक्रमणिका में प्राथमिक कुंजी निहित होती है।

व्याख्या योजना से पता चलता है कि सूचकांक IDX_NOME टेबल पर प्रयोग किया जाता है Paziente . DBMS इंडेक्स में नाम ढूंढता है और ID_PAZIENTE . ढूंढता है वहां, वह कुंजी है जिसे हमें दूसरी तालिका तक पहुंचने की आवश्यकता है। तो जोड़ने के लिए कुछ भी नहीं है। (दूसरे DBMS में हमने (NOME, ID_PAZIENTE) पर एक कंपोजिट इंडेक्स जोड़ा होता ऐसा होने के लिए।)

फिर टेबल है Analisi विचार करने के लिए। हमें FK_ANALISI_PAZIENTE . के माध्यम से एक रिकॉर्ड मिलता है जिसमें ID_PAZIENTE . है जिसका उपयोग मिलान खोजने के लिए किया जाता है, और परोक्ष रूप से प्राथमिक कुंजी ID_ANALISI जिसका उपयोग तालिका तक पहुँचने के लिए किया जा सकता है, लेकिन यह आवश्यक भी नहीं है, क्योंकि हमारे पास वह सभी जानकारी है जो हमें सूचकांक से चाहिए। ऐसा कुछ भी नहीं बचा है जिसे हमें तालिका में खोजने की आवश्यकता हो। (फिर से, दूसरे DBMS में हम (ID_PAZIENTE, ID_ANALISI) पर एक कंपोजिट इंडेक्स जोड़ देते। कवरिंग इंडेक्स रखने के लिए।)

तो क्या होता है:गिनने के लिए दूसरे इंडेक्स को पढ़ने के लिए एक इंडेक्स पढ़ें। उत्तम। जोड़ने के लिए कुछ नहीं है।

हम कर सकते थे COUNT(analisi0_.ID_ANALISI) . को बदलें COUNT(*) . के साथ जैसा कि पूर्व केवल कहता है "रिकॉर्ड गिनें जहां ID_ANALISI शून्य नहीं है", जो हमेशा ID_ANALISI . के रूप में होता है तालिका की प्राथमिक कुंजी है। तो बाद वाले का उपयोग करना और "रिकॉर्ड गिनना" कहना आसान है। हालांकि, मुझे यह उम्मीद नहीं है कि यह क्वेरी को काफी तेज करेगा यदि बिल्कुल भी।

तो एक प्रश्न के दृष्टिकोण से, इसे तेज करने के लिए कुछ भी नहीं है। यहाँ और बातें हैं जो दिमाग में आती हैं:

  • विभाजित टेबल? नहीं, मुझे इसमें कोई फायदा नहीं दिखेगा। क्वेरी को समानांतर धागे में निष्पादित किया गया था, यह तेज़ हो सकता था, लेकिन जहां तक ​​​​मुझे पता है, MySQL में एकाधिक विभाजनों पर समानांतर निष्पादन नहीं है। (हालांकि मैं गलत हो सकता हूं।)
  • टेबल को डीफ़्रैग्मेन्ट करना? नहीं, टेबल को क्वेरी में भी एक्सेस नहीं किया जाता है।
  • इससे हमें मिलता है:बेहतर हार्डवेयर खरीदें। (क्षमा करें, आपके लिए कोई बेहतर सलाह नहीं है।)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मिला:बिट, अपेक्षित:हाइबरनेट 4 अपग्रेड के बाद बूलियन

  2. मैं php और mysql का उपयोग करके एक टैगिंग सिस्टम कैसे बना सकता हूं?

  3. mySQL और postgreSQL में क्लॉज द्वारा समूह, postgreSQL में त्रुटि क्यों?

  4. MYSQL उच्च LIMIT ऑफ़सेट क्वेरी को धीमा क्यों करता है?

  5. PHP में mysql LOAD स्टेटमेंट का उपयोग करना विफल हो जाता है, लेकिन इसे कमांड लाइन के माध्यम से करना काम करता है