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

मैं इस क्वेरी को तेज़ी से कैसे चलाऊंगा?

सूचकांक

  • आपको चाहिए - कम से कम - प्रत्येक फ़ील्ड पर एक अनुक्रमणिका जिसका उपयोग JOIN . में किया जाता है हालत।

  • WHERE . में दिखाई देने वाले फ़ील्ड पर इंडेक्स या GROUP BY या ORDER BY खंड अधिकांश समय उपयोगी भी होते हैं।

  • जब किसी तालिका में, जॉइन (या WHERE या GROUP BY या ORDER BY) में दो या दो से अधिक फ़ील्ड का उपयोग किया जाता है, तो इन (दो या अधिक) फ़ील्ड का एक कंपाउंड (संयुक्त) इंडेक्स अलग-अलग इंडेक्स से बेहतर हो सकता है। उदाहरण के लिए SiteNumbers . में तालिका, संभावित अनुक्रमणिका यौगिक हैं (number_accountid, number_active) या (number_active, number_accountid)

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

सामान्य सलाह के अलावा (EXPLAIN योजना की जांच करें, जहां आवश्यक हो वहां इंडेक्स जोड़ें, क्वेरी के परीक्षण विविधताएं),

मैंने देखा है कि आपकी क्वेरी में आंशिक कार्टेशियन उत्पाद है। तालिका Accounts तीन तालिकाओं के साथ एक-से-अनेक संबंध हैं FTPDetails , SiteNumbers और PPC . इसका प्रभाव यह है कि यदि आपके पास उदाहरण के लिए 1000 खाते हैं, और प्रत्येक खाता 10 FTPDetails, 20 SiteNumbers और 3 PPCs से संबंधित है, तो क्वेरी प्रत्येक खाते के लिए 600 पंक्तियों (10x20x3 का उत्पाद) के लिए वापस आ जाएगी। कुल 600K पंक्तियों में जहां कई डेटा डुप्लिकेट किए गए हैं।

इसके बजाय आप आधार डेटा (खाता और बाकी टेबल) के लिए क्वेरी को तीन प्लस वन में विभाजित कर सकते हैं। इस तरह, डेटा की केवल 34K पंक्तियों (छोटी लंबाई वाली) को स्थानांतरित किया जाएगा:

Accounts JOIN Clients JOIN Users 
  (with all fields needed from these tables)
  1K rows

Accounts JOIN FTPDetails
  (with Accounts.account_id and all fields from FTPDetails)
  10K rows

Accounts JOIN SiteNumbers
  (with Accounts.account_id and all fields from SiteNumbers)
  20K rows

Accounts JOIN PPC
  (with Accounts.account_id and all fields from PPC)
  3K rows

और फिर संयुक्त जानकारी दिखाने के लिए क्लाइंट पक्ष में 4 प्रश्नों के डेटा का उपयोग करें।

मैं निम्नलिखित अनुक्रमणिका जोड़ूंगा:

Table Accounts
  index on (account_designer)
  index on (account_client)
  index on (account_active, account_id)
  index on (account_update)

Table FTPDetails
  index on (ftp_active, ftp_accountid)

Table SiteNumbers
  index on (number_active, number_accountid)

Table PPC
  index on (ppc_active, ppc_accountid)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql DECLARE जबकि संग्रहीत प्रक्रिया के बाहर कैसे?

  2. क्या MySQL में TimeStamp जैसे peewee में DateTimeField के लिए एक ऑटो अपडेट विकल्प है?

  3. प्रति समूह MySQL शीर्ष 2 रिकॉर्ड

  4. Ubuntu 14.04 पर phpMyAdmin के साथ MySQL कैसे स्थापित करें?

  5. PHP के साथ यूनिकोड डेटा कैसे प्रदर्शित करें