2013-11-28 5 views
9

मैं MySQL अनुक्रमणिका सीख रहा हूं और पाया कि सूचकांक को SELECT क्वेरी के WHERE खंड में नामित किसी भी कॉलम पर लागू किया जाना चाहिए।MySQL शुरुआती - एकाधिक कॉलम इंडेक्स

तब मुझे Multiple Column Index vs Multiple Indexes मिला।

पहला प्रश्न, मैं सोच रहा था कि एकाधिक कॉलम इंडेक्स क्या है। मुझे जूमला से कोड मिल गया, क्या यह एकाधिक कॉलम इंडेक्स है?

CREATE TABLE `extensions` (
    `extension_id` INT(11) NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(100) NOT NULL, 
    `type` VARCHAR(20) NOT NULL, 
    `element` VARCHAR(100) NOT NULL, 
    `folder` VARCHAR(100) NOT NULL, 
    `client_id` TINYINT(3) NOT NULL, 
    ... ... 
    PRIMARY KEY (`extension_id`), 

    // does code below is multiple column index? 

    INDEX `element_clientid` (`element`, `client_id`), 
    INDEX `element_folder_clientid` (`element`, `folder`, `client_id`), 
    INDEX `extension` (`type`, `element`, `folder`, `client_id`) 
) 

दूसरा प्रश्न, क्या मैं सोच रहा हूं कि एक चयन पर एक एकाधिक कॉलम इंडेक्स का उपयोग किया जाता है? अनुक्रमणिका के लिए अंगूठे का

SELECT column_x WHERE element=y AND clinet_id=y; // index: element_clientid 

SELECT ex.col_a, tb.col_b 
    FROM extensions ex 
    LEFT JOIN table2 tb 
    ON (ex.ext_id = tb.ext_id) 
    WHERE ex.element=x AND ex.folder=y AND ex.client_id=z; // index: element_folder_clientid 

उत्तर

20

जनरल नियम एक WHERE या JOIN खंड में इस्तेमाल किसी भी क्षेत्र पर एक तमाचा है।

कहा जा रहा है कि कुछ अनुकूलन आप कर सकते हैं। यदि आप KNOW कि फ़ील्ड का एक निश्चित संयोजन केवल एक ही है जिसे किसी विशेष तालिका पर WHERE में कभी भी उपयोग किया जाएगा, तो आप केवल उन फ़ील्ड पर एक बहु-फ़ील्ड कुंजी बना सकते हैं, उदा।

INDEX (field1, field2, field5) 

बनाम।

INDEX (field1), 
INDEX (field2), 
INDEX (field5) 

कई मामलों में एक बहु-क्षेत्रीय सूचकांक अधिक कुशल हो सकता है, v.s एकाधिक अनुक्रमणिका स्कैन करने के लिए। नकारात्मकता यह है कि मल्टी-फील्ड इंडेक्स केवल प्रयोग योग्य है यदि प्रश्न वाले फ़ील्ड वास्तव में WHERE क्लॉज में उपयोग किए जाते हैं।

अपने नमूना प्रश्नों के साथ, element और field_id सभी तीन अनुक्रमणिका में हैं, तो आप उन्हें अपने समर्पित सूचकांक में विभाजित करने से बेहतर हो सकते हैं। यदि ये परिवर्तनीय फ़ील्ड हैं, तो इसे अपनी समर्पित अनुक्रमणिका रखना बेहतर है। जैसे यदि आपको कभी भी field_id थोक में बदलना है, तो डीबी को 3 अलग-अलग इंडेक्स अपडेट करना होगा, vs.s. केवल एक समर्पित एक अद्यतन।

लेकिन यह सब बेंचमार्किंग के लिए नीचे आता है - विभिन्न इंडेक्स सेटअप के साथ अपने विशेष सेटअप का परीक्षण करें और देखें कि कौन सा सर्वश्रेष्ठ प्रदर्शन करता है। अंगूठे के नियम आसान हैं, लेकिन 100% समय पर काम नहीं करते हैं।

+0

हां, मैं फ़ील्ड 1 के आधार पर कुछ परीक्षण प्रकार कर रहा हूं और अन्य फ़ील्ड स्वचालित रूप से अनुक्रमित है। लेकिन मैं स्वतंत्र रूप से विभाजन तत्व और field_id के बारे में निश्चित नहीं हूँ। – qaharmdz

संबंधित मुद्दे