यहां आपके प्रश्न हैं। बहुवचन। उन्हें फिर से लिखना ("दूसरे शब्दों में" के साथ) वे सिर्फ अलग प्रश्न हैं। ऐसा करने से उत्तरदाताओं के लिए यह आवश्यक रूप से आसान नहीं हो जाता है। इसके विपरीत।
Q1:[शीर्षक प्रश्न] क्या संयुक्त इंडेक्स के सबसे बाएं कॉलम में वाइल्डकार्ड का मतलब है कि इंडेक्स में शेष कॉलम इंडेक्स लुकअप (MySQL) में उपयोग नहीं किए जाते हैं?
A1:नहीं, इसका मतलब यह नहीं है।
Q2:क्या लास्ट_नाम कंडीशन में इस्तेमाल किए गए वाइल्डकार्ड का मतलब है कि MySQL को इंडेक्स खोजने में मदद करने के लिए फर्स्ट_नाम कंडीशन का इस्तेमाल नहीं किया जाएगा?
A2:नहीं, इसका मतलब यह नहीं है। साथ ही उस प्रश्न की पूंछ अस्पष्ट है। यह पहले से ही जानता है कि किस इंडेक्स का उपयोग करना है, इस तरह की अस्पष्टता का एक ऑफशूट उत्तर हो सकता है।
Q3:दूसरे शब्दों में, लास्ट_नाम कंडीशन पर वाइल्डकार्ड लगाकर MySQL केवल आंशिक इंडेक्स लुकअप करेगा (और कॉलम में दी गई शर्तों को अनदेखा करता है जो last_name के दाईं ओर हैं)?
A3:नहीं। डेटा पेज लुकअप की धीमी गति से लाभान्वित होने वाली कवरिंग इंडेक्स रणनीति के समान सबसे दाहिने कॉलम को इंडेक्स से परोसा जाता है।
Q4:...क्या उदाहरण-1, उदाहरण-2 से तेज होगा?
ए 4:हाँ। यह उन कॉलमों के संबंध में एक कवरिंग इंडेक्स है। कवरिंग इंडेक्स देखें।
Q4 के विषय में एक तरफ के रूप में। यह अप्रासंगिक है अगर यह पीके या गैर-पीके है। शायद एक दर्जन कारण हैं कि एक पीके के रूप में आपके आवेदन के लिए भयानक होगा।
मूल उत्तर नीचे दिए गए हैं:
केवल . के साथ (last_name,first_name)
. पर एक संयुक्त कुंजी और एक प्रश्न जैसा कि आपने उल्लेख किया है
WHERE first_name LIKE 'joh%'
... यह सूचकांक का बिल्कुल भी उपयोग नहीं करेगा। यह एक टेबल स्कैन करेगा।
. की अनुपस्थिति के कारण- एक एकल स्तंभ कुंजी
first_name
. पर first_name
के साथ एक संयुक्त कुंजी सबसे बाएं
तो टेबल स्कैन यहां आ गया है।
कृपया मैनुअल पेज देखें मल्टीपल-कॉलम इंडेक्स
ए> अधिक पढ़ने के लिए। और left-most
पर ध्यान केंद्रित करें इसकी अवधारणा। वास्तव में, उस पृष्ठ पर जाएं, और left
शब्द पर खोजें ।
व्याख्या पर मैनुअल पेज देखें। mysql में सुविधा। साथ ही लेख बेहतर Mysql क्वेरी लिखने के लिए व्याख्या का उपयोग करना ए> ।
संपादित करें
जब से मैं यहां एक या दो घंटे पहले आया था, तब से इस प्रश्न में कुछ संपादन हुए हैं। मैं आपको निम्नलिखित के साथ छोड़ दूंगा। व्याख्या के माध्यम से अपनी वास्तविक क्वेरी चलाएँ, और Using Explain ...
के माध्यम से समझें उपरोक्त लिंक या कोई अन्य संदर्भ
drop table myNames;
create table myNames
( id int auto_increment primary key,
lastname varchar(100) not null,
firstname varchar(100) not null,
col4 int not null,
key(lastname,firstname)
);
truncate table myNames;
insert myNames (lastName,firstName,col4) values
('Smith','John',1),('Smithers','JohnSomeone',1),('Smith3','John4324',1),('Smi','Jonathan',1),('Smith123x$FA','Joh',1),('Smi3jfif','jkdid',1),('r3','fe2',1);
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
insert myNames (lastName,firstName,col4) select lastname,firstname,col4 from mynames;
select count(*) from myNames;
-- 458k rows
select count(*)
from myNames
where lastname like 'smi%';
-- 393216 rows
select count(*)
from myNames
where lastname like 'smi%' and firstname like 'joh%';
-- 262144 rows
Explain
rows
. के लिए वूडू नंबर प्रदान करता है . वूडू? हां, क्योंकि एक प्रश्न जो संभावित रूप से एक घंटे तक चलेगा, आप पूछ रहे हैं explain
आपको अस्पष्ट गणना देने के लिए, इसे चलाने के लिए नहीं, और 2 सेकंड या उससे कम समय में आपको वह उत्तर देने के लिए। बिना explain
के, जब इसे वास्तविक रूप से चलाया जाता है, तो मानदंड के लिए इन्हें वास्तविक गणना न मानें। ।
explain
select count(*)
from myNames
where lastname like 'smi%';
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
| 1 | SIMPLE | myNames | range | lastname | lastname | 302 | NULL | 233627 | Using where; Using index |
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
explain
select count(*)
from myNames
where lastname like 'smi%' and firstname like 'joh%' and col4=1;
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
| 1 | SIMPLE | myNames | range | lastname | lastname | 604 | NULL | 233627 | Using where; Using index |
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
-- the below chunk is interest. Look at the Extra column
explain
select count(*)
from myNames
where lastname like 'smi%' and firstname like 'joh%' and col4=1;
+----+-------------+---------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | myNames | ALL | lastname | NULL | NULL | NULL | 457932 | Using where |
+----+-------------+---------+------+---------------+------+---------+------+--------+-------------+
explain
select count(*)
from myNames
where firstname like 'joh%';
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
| 1 | SIMPLE | myNames | index | NULL | lastname | 604 | NULL | 453601 | Using where; Using index |
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
analyze table myNames;
+----------------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+----------------------+---------+----------+----------+
| so_gibberish.mynames | analyze | status | OK |
+----------------------+---------+----------+----------+
select count(*)
from myNames where left(lastname,3)='smi';
-- 393216 -- the REAL #
select count(*)
from myNames where left(lastname,3)='smi' and left(firstname,3)='joh';
-- 262144 -- the REAL #
explain
select lastname,firstname
from myNames
where lastname like 'smi%' and firstname like 'joh%';
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+
| 1 | SIMPLE | myNames | range | lastname | lastname | 604 | NULL | 226800 | Using where; Using index |
+----+-------------+---------+-------+---------------+----------+---------+------+--------+--------------------------+