बड़े ऑफसेट के साथ, MySQL
को और अधिक रिकॉर्ड ब्राउज़ करने की आवश्यकता है।
योजना filesort
का उपयोग करता है यहां तक कि अगर (जिसका अर्थ है कि सभी रिकॉर्ड ब्राउज़ किया जाना चाहिए), MySQL
यह अनुकूलन कर ताकि केवल $offset + $limit
शीर्ष रिकॉर्ड हल कर रहे हैं, जो यह बहुत अधिक $offset
के निचले मूल्यों के लिए सक्षम बनाता है।
ठेठ समाधान सूचकांक करने के लिए कॉलम आप पर आदेश दे रहे हैं है,, स्तंभों की अंतिम मान रिकॉर्ड और बाद में प्रश्नों में प्रयोग करना पुन: उपयोग इस तरह:
SELECT *
FROM mytable
ORDER BY
value, id
LIMIT 0, 10
जो आउटपुट:
value id
1 234
3 57
4 186
5 457
6 367
8 681
10 366
13 26
15 765
17 345 -- this is the last one
अगले पृष्ठ पर पाने के लिए आपको प्रयोग करेंगे:
SELECT *
FROM mytable
WHERE (value, id) > (17, 345)
ORDER BY
value, id
LIMIT 0, 10
, जिसमें का उपयोग करता है (value, id)
पर डेक्स।
बेशक यह मनमाने ढंग से पहुंच पृष्ठों के साथ मदद नहीं करेगा, लेकिन अनुक्रमिक ब्राउज़िंग के साथ मदद करता है।
इसके अलावा, MySQL
में देर से पंक्ति लुकअप के साथ कुछ समस्याएं हैं।
SELECT *
FROM (
SELECT id
FROM mytable
ORDER BY
value, id
LIMIT $offset, $limit
) q
JOIN mytable m
ON m.id = q.id
अधिक विस्तृत व्याख्या के लिए यह लेख देखें:: स्तंभों अनुक्रमित रहे हैं, तो इसे इस तरह आपकी क्वेरी को फिर से लिखने की कोशिश कर रहा लायक हो सकता है
अच्छा सवाल है, मैं कर रहा हूँ इस संबंध में MySQL कैसे काम करता है उससे परिचित नहीं है। – RedFilter
उत्तरों के लिए धन्यवाद, कुछ गति प्राप्त करने की आशा में बाद में इसका परीक्षण करेंगे। – Omiod