अपडेट करें:
समस्या के अधिक विस्तृत विश्लेषण के लिए मेरे ब्लॉग में यह लेख देखें:
जब आप LIMIT 150000, 10
. जैसा कुछ जारी करते हैं , इसका मतलब है कि MySQL
इन 150,000
को पार करना चाहिए रिकॉर्ड करें और अगला 10
ढूंढें ।
MySQL
में इंडेक्स को ट्रैवर्स करना धीमा है ।
साथ ही, MySQL
लेट रो लुकअप करने में सक्षम नहीं है।
सैद्धांतिक रूप से, यदि आप ORDER BY id LIMIT 100000, 10
द्वारा ऑर्डर करते हैं , यह 100000
. से मानों को खोजने के लिए अनुक्रमणिका का उपयोग करने के लिए पर्याप्त है करने के लिए 100010
, तो केवल 10
देखें पंक्तियाँ जो उस अनुक्रमणिका को संतुष्ट करती हैं और उन्हें वापस करती हैं।
MySQL
. को छोड़कर सभी प्रमुख सिस्टम इसके बारे में जानते हैं और पंक्तियों को तभी देखें जब मान वास्तव में लौटाए जाने हों।
MySQL
, हालांकि, प्रत्येक पंक्ति को देखता है।
अपनी क्वेरी को इस तरह फिर से लिखने का प्रयास करें:
SELECT news.*
FROM (
SELECT id
FROM news
WHERE cat_id='4'
ORDER BY
id DESC
LIMIT 150000, 10
) o
JOIN news
ON news.id = o.id