सूचकांक
-
आपको चाहिए - कम से कम - प्रत्येक फ़ील्ड पर एक अनुक्रमणिका जिसका उपयोग
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)