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

ORDER BY का उपयोग करते समय MySQL अनुक्रमणिका (फ़ाइलों का उपयोग करके) का उपयोग नहीं कर रहा है

आप इस मामले में किसी अनुक्रमणिका का उपयोग नहीं कर सकते, क्योंकि आप RANGE . का उपयोग करते हैं छानने की स्थिति।

अगर आप कुछ इस तरह इस्तेमाल करेंगे:

SELECT  *
FROM    values_table this_
WHERE   this_.value1 = @value
ORDER BY
        value2
LIMIT 10

, फिर (VALUE1, VALUE2) . पर एक समग्र अनुक्रमणिका बनाना फ़िल्टरिंग और ऑर्डरिंग दोनों के लिए उपयोग किया जाएगा।

लेकिन आप एक श्रेणीबद्ध स्थिति का उपयोग करते हैं, इसलिए आपको वैसे भी आदेश देना होगा।

आपका संयुक्त सूचकांक इस तरह दिखेगा:

value1 value2
-----  ------
1      10
1      20
1      30
1      40
1      50
1      60
2      10
2      20
2      30
3      10
3      20
3      30
3      40

, और यदि आप 1 . का चयन करते हैं और 2 value1 . में , आपको अभी भी value2 . का पूरा सॉर्ट किया गया सेट नहीं मिलता है ।

अगर आपका इंडेक्स value2 . पर है बहुत चयनात्मक नहीं है (यानी कई DISTINCT value2 . नहीं हैं तालिका में), आप कोशिश कर सकते हैं:

CREATE INDEX ix_table_value2_value1 ON mytable (value2, value1)

/* Note the order, it's important */    

SELECT  *
FROM    (
        SELECT  DISTINCT value2
        FROM    mytable
        ORDER BY
                value2
        ) q,
        mytable m
WHERE   m.value2 >= q.value2
        AND m.value2 <= q.value2
        AND m.value1 BETWEEN 13123123 AND 123123123

इसे SKIP SCAN . कहा जाता है पहुँच विधि। MySQL सीधे तौर पर इसका समर्थन नहीं करता है, लेकिन इसका अनुकरण इस तरह किया जा सकता है।

RANGE इस मामले में एक्सेस का उपयोग किया जाएगा, लेकिन संभवत:आपको तब तक कोई प्रदर्शन लाभ नहीं मिलेगा जब तक DISTINCT value2 लगभग 1% . से कम शामिल हैं पंक्तियों की।

नोट का उपयोग:

m.value2 >= q.value2
AND m.value2 <= q.value2

के बजाय

m.value2 = q.value2

यह MySQL बनाता है RANGE प्रदर्शन करें प्रत्येक लूप पर जाँच कर रहा है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django पोस्ट सेव सिग्नल यूआईडी के बावजूद दो बार कॉल किया जा रहा है

  2. SQL में फ़िल्टर सिस्टम को कैसे कार्यान्वित करें?

  3. क्या mysqli_real_escape_string SQL इंजेक्शन या अन्य SQL हमलों से बचने के लिए पर्याप्त है?

  4. वीएस 2019 और MySQL एंटिटी फ्रेमवर्क डुप्लिकेट डेटाबेस नाम

  5. MySQL पंक्तियों को प्राप्त करता है लेकिन एक कॉलम मान को दूसरे पर पसंद करता है