2010-10-26 13 views
5

मैं निम्नलिखित प्रश्न हैं:mysql बाइनरी तुलना नहीं करता उपयोग सूचकांक

EXPLAIN EXTENDED SELECT * 
FROM (
`photo_data` 
) 
LEFT JOIN `deleted_photos` ON `deleted_photos`.`photo_id` = `photo_data`.`photo_id` 
WHERE photo_data.photo_id = 'UKNn' 
AND `deleted_photos`.`photo_id` IS NULL 

मैं दुर्भाग्य से इस photo_id तुलना करने के लिए द्विआधारी उपयोग करने के लिए (जो एक अलग बाहर सेवा से मेरे लिए सौंप दिया जा रहा है)। ताकि मैं 'यूकेएनएन' की बजाय डाटाबेस से बाहर निकलने से बच सकूं।

समस्या यह है कि जब मैं समझाता हूं, तो मुझे लगता है कि बाइनरी का उपयोग इंडेक्स का उपयोग नहीं करता है। यदि मैं बाइनरी लेता हूं तो यह photo_id के लिए इंडेक्स का उपयोग करता है। क्या बाइनरी विकल्प का उपयोग करने और इसके साथ एक इंडेक्स का उपयोग करने में सक्षम होने का कोई तरीका है?

उत्तर

4

MySQL सूचकांक के लिए स्तंभ का मिलान का उपयोग करता है। गैर-द्विआधारी संयोजन के साथ एक सूचकांक बाइनरी लुकअप के लिए उपयोगी नहीं है क्योंकि ऑर्डर अलग हो सकता है।

आप द्विआधारी मिलान करने के लिए स्तंभ खुद को बदल सकता है:

ALTER TABLE YourTable MODIFY 
    YourColumn VARCHAR(4) 
    CHARACTER SET latin1 
    COLLATE latin1_bin; 

फिर सूचकांक एक द्विआधारी देखने के लिए उपयोगी होगा।

2

यदि आपको केस-सेंसिटिव तरीके से क्षेत्र मूल्य की तुलना करने की आवश्यकता है - तो आप उस क्षेत्र के लिए विशेष रूप से संयोजन बदल सकते हैं।

ALTER TABLE photo_data MODIFY photo_id VARCHAR(5) CHARACTER SET utf8 COLLATE utf8_bin 

या

ALTER TABLE photo_data MODIFY photo_id VARCHAR(5) CHARACTER SET utf8 COLLATE utf8_general_cs 
+0

क्या आपके उत्तर को स्वीकार करने का कोई तरीका है? आप लोगों के पास एक ही समय में एक ही जवाब था –

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