आपके पास (public, date)
. पर एक समग्र अनुक्रमणिका होनी चाहिए
इस तरह, MySQL
public
पर फ़िल्टर करेगा और date
पर छाँटें ।
आपके EXPLAIN
. से मैंने देखा कि आपके पास (public, date)
. पर एक संयुक्त अनुक्रमणिका नहीं है ।
इसके बजाय आपके पास public
. पर दो अलग-अलग अनुक्रमणिकाएं हैं और date
. को . कम से कम, उनके नाम IDX_PUBLIC
. तो यही हैं और DATE
बताओ।
अपडेट करें:
आप public
कॉलम BIT
नहीं है , यह एक BINARY(1)
है . यह एक वर्ण प्रकार है और वर्ण तुलना का उपयोग करता है।
पूर्णांकों की वर्णों से तुलना करते समय, MySQL
बाद वाले को पूर्व में परिवर्तित करता है, इसके विपरीत नहीं।
ये क्वेरी अलग-अलग परिणाम देती हैं:
CREATE TABLE t_binary (val BINARY(2) NOT NULL);
INSERT
INTO t_binary
VALUES
(1),
(2),
(3),
(10);
SELECT *
FROM t_binary
WHERE val <= 10;
---
1
2
3
10
SELECT *
FROM t_binary
WHERE val <= '10';
---
1
10
या तो अपना public
बदलें कॉलम को bit
होना चाहिए या अपनी क्वेरी को इस तरह फिर से लिखें:
SELECT c.*
FROM Cars c
WHERE c.PUBLIC = '1'
ORDER BY
DATE DESC
, मैं। इ। वर्णों की तुलना वर्णों से करें, पूर्णांकों से नहीं।