अच्छा सवाल।
इंडेक्स बाएं से दाएं काम करते हैं, इसलिए आपका WHERE
मानदंड सूचकांक का उपयोग करेंगे। सॉर्ट भी इस मामले में सूचकांक का उपयोग करेगा (नीचे निष्पादन योजना)।
मैनुअल से :
अगर आपके पास सिंगल कॉलम इंडेक्स था (accountid
), इसके बजाय एक फाइलसॉर्ट का उपयोग किया जाएगा। इसलिए, आपकी क्वेरी उस अनुक्रमणिका से लाभान्वित होती है।
दो कॉलम इंडेक्स
create table t1 (
accountid tinyint,
logindate date);
create index idx on t1 (accountid, logindate);
insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'),
(1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'),
(1, '2012-09-01'), (3, '2012-10-19'), (1, '2012-03-01')
निष्पादन योजना
ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN REF ROWS FILTERED EXTRA 1 SIMPLE t1 ref idx idx 2 const 5 100 Using where; Using index
एकल स्तंभ अनुक्रमणिका
create table t1 (
accountid tinyint,
logindate date);
create index idx on t1 (accountid);
insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'),
(1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), (1, '2012-09-01'),
(3, '2012-10-19'), (1, '2012-03-01')
निष्पादन योजना
ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN REF ROWS FILTERED EXTRA 1 SIMPLE t1 range idx idx 2 5 100 Using where; Using filesort