Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL:अनुक्रमणिका के साथ पूर्णांक मान और स्ट्रिंग फ़ील्ड की तुलना

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

इसके अलावा, DB हमेशा Strings -> Numbers को कवर करता है क्योंकि यह नियतात्मक तरीका है (अन्यथा 1 को '01', '001' में परिवर्तित किया जा सकता है जैसा कि टिप्पणियों में बताया गया है)।

इसलिए, अगर हम उन दो मामलों की तुलना करें जो आपको भ्रमित करते हैं:

-- index is used
EXPLAIN SELECT * FROM a_table WHERE int_column = '1';

डीबी स्ट्रिंग '1' को नंबर 1 में परिवर्तित करता है और फिर क्वेरी निष्पादित करता है। अंत में दोनों तरफ इंट होता है इसलिए यह इंडेक्स का उपयोग कर सकता है।

-- index is NOT used. WTF?
EXPLAIN SELECT * FROM a_table WHERE str_column = 1;

फिर से, यह स्ट्रिंग को संख्याओं में परिवर्तित करता है। हालांकि, इस बार उसे टेबल में स्टोर डेटा को कन्वर्ट करना है। वास्तव में, आप cast(str_column as int) = 1 जैसी खोज कर रहे हैं . इसका मतलब है, अब आप अनुक्रमित डेटा पर खोज नहीं कर रहे हैं, डीबी नहीं अनुक्रमणिका का उपयोग करें।

अधिक जानकारी के लिए कृपया इसे देखें:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीडीओ ने डेटा की एक पंक्ति को हटाने से इंकार कर दिया (विशिष्ट तालिका में)

  2. mysql बहुसंकेतक प्रविष्टियों की कई घटनाओं की गणना करें

  3. मैसकल क्वेरी में डिवीजन

  4. सिद्धांत 2 नया क्षेत्र जोड़ता है जो स्वतः अनुक्रम मान उत्पन्न करता है

  5. रेल में किसी तालिका में कौन सी अनुक्रमणिका जोड़ना है?