मेरे पास 5 मिलियन से अधिक पंक्तियों की एक तालिका है। जब मैं एक चुनिंदा क्वेरी करता हूं तो इसमें लगभग 20 सेकंड लगते हैं।MYSQL - इंडेक्सिंग और ऑप्टिमाइज़ क्वेरी का चयन करें
CREATE TABLE `CompanyMaster` (
`CompUID` int(11) NOT NULL AUTO_INCREMENT,
`Weburl` varchar(150) DEFAULT NULL,
`CompanyName` varchar(200) DEFAULT NULL,
`Alias1` varchar(150) DEFAULT NULL,
`Alias2` varchar(150) DEFAULT NULL,
`Alias3` varchar(150) DEFAULT NULL,
`Alias4` varchar(150) DEFAULT NULL,
`Created` datetime DEFAULT NULL,
`LastModified` datetime DEFAULT NULL,
PRIMARY KEY (`CompUID`),
KEY `Alias` (`Alias1`,`Alias2`,`Alias3`,`Alias4`)
) ENGINE=InnoDB AUTO_INCREMENT=5457968 DEFAULT CHARSET=latin1
यहाँ कि क्वेरी से व्याख्या है:
SELECT CompUID,Weburl FROM `CompanyTable` WHERE (Alias1='match1' AND Alias2='match2')OR Alias3='match3' OR Alias4='match4'
यहाँ तालिका संरचना है
--------+------------------------------------------------------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+------+---------+------+---------+----------------------+
| 1 | SIMPLE | CompanyTable | ALL | Alias | NULL | NULL | NULL | 5255929 | Using where |
+----+-------------+----------+-------+---------------+------+---------+------+---------+----------------------+
मैं समग्र सूचकांक Alias
इस्तेमाल किया (Alias1
, Alias2
, Alias3
, Alias4
) । लेकिन मेरा मानना है कि यह सबसे अच्छा नहीं है। कृपया मुझे इस चयन क्वेरी लुकअप के लिए सही अनुक्रमण का सुझाव दें।
'या Alias3 = 'match3' या Alias4 = 'match4'' क्या पूर्ण तालिका स्कैन मजबूर कर रहा है है पर विचार करें। यह खंड अनिवार्य रूप से अनदेखा है। इस क्वेरी को अनुकूलित करने के लिए, आपको उपनाम 3 और उपनाम 4 पर एक अनुक्रमणिका जोड़नी होगी। – drew010
आप इसे इस तरह के संकेत प्रदान करके अपनी क्वेरी के प्रदर्शन की जांच कर सकते हैं: 'चुनें COMPUID, 'कंपनीटेबल' उपयोग सूचकांक (उपनाम) से Weburl ...'। क्या इससे गति में कोई फर्क पड़ता है? – zedfoxus
निम्नलिखित क्वेरी के शेयर गणना: "'कंपनीटेबल' से गिनती (*) का चयन करें जहां एलियास 1 = 'मैच 1' और एलियास 2 = 'मैच 2';" और "कंपनीटेबल 'से गिनती (*) का चयन करें जहां एलियास 1 =' मैच 3 '" और "कंपनीटेबल' से गिनती चुनें (*) जहां एलियास 1 = 'मैच 4"। –