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

मुझे दो श्रेणी स्थितियों वाली क्वेरी के लिए अनुक्रमण के बारे में कैसे जाना चाहिए?

IN = . के बीच की तरह है और एक 'रेंज'। इसलिए, मैं प्रश्न पर शीर्षक के साथ प्रश्नचिह्न लगाता हूं। दो श्रेणियों को अनुकूलित करना लगभग असंभव है; एक IN साथ ही एक श्रेणी में अनुकूलन की कुछ संभावना होती है।

. के आधार पर
WHERE `StartedAt` >= FROM_UNIXTIME(1518990000)  
AND   `StartedAt` <  FROM_UNIXTIME(1518998400) 
AND `DeviceId` IN (
    UNHEX('00030000000000000000000000000000'),
    UNHEX('000300000000000000000000000181cd'),
    UNHEX('000300000000000000000000000e7cf6'),
    UNHEX('000300000000000000000000000e7cf7'),
    UNHEX('000300000000000000000000000f423f')
) AND `MarkedForDeletion` = FALSE

मैं 2 इंडेक्स प्रदान करूंगा और ऑप्टिमाइज़र को यह तय करने दूंगा कि किसका उपयोग करना है:

INDEX(MarkedForDeletion, StartedAt, DeviceId)
INDEX(MarkedForDeletion, DeviceId, StartedAt)

MySQL/MariaDB के कुछ नए संस्करण छलांग लगा सकते हैं और सेकंड में सभी 3 स्तंभों का उपयोग कर सकते हैं अनुक्रमणिका। सभी संस्करणों में किसी भी इंडेक्स के पहले 2 कॉलम इसे उम्मीदवार बनाते हैं। चुनाव आंकड़ों से प्रेरित हो सकता है, और 'सही' विकल्प हो सकता है (या नहीं भी)।

चूंकि AlarmId NULL नहीं हो सकता , पैटर्न का उपयोग करें:COUNT(*)

उस परिवर्तन को करने के बाद, मेरी प्रत्येक अनुक्रमणिका "कवर" कर रही है, जिससे प्रदर्शन में अतिरिक्त वृद्धि हो रही है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में DATETIME फ़ील्ड से केवल दिनांक का चयन कैसे करें?

  2. MySQL में CHAR_LENGTH () क्या है?

  3. डेटाबेस में JSON संग्रहीत करना बनाम प्रत्येक कुंजी के लिए एक नया कॉलम रखना

  4. MySQL में छवियां

  5. mysql में एमपी 3 फाइलों को स्टोर करना