यह रही आपकी मूल क्वेरी
SELECT l.location_id, l.location_name,
t.type_id, t.type_name,
i.location_address, i.location_phone
FROM location AS l
LEFT JOIN location_information AS i ON (l.location_id = i.location_id)
LEFT JOIN location_types AS t ON (l.location_type_id = t.type_id)
ORDER BY l.location_id DESC
LIMIT 10
आप आखिरी बार पेजिनेशन करते हैं। अगर आप इस क्वेरी को रिफलेक्टर करते हैं, तो आप पहले पेजिनेशन कर सकते हैं।
SELECT l.location_id, l.location_name,
t.type_id, t.type_name,
i.location_address, i.location_phone
FROM
(SELECT location_id,location_type_id FROM location
ORDER BY location_id LIMIT 10) AS k
LEFT JOIN location AS l ON (k.location_id = l.location_id)
LEFT JOIN location_information AS i ON (k.location_id = i.location_id)
LEFT JOIN location_types AS t ON (l.location_type_id = t.type_id)
;
सूचना मैंने k
. नामक एक उपश्रेणी बनाई है . 10 चाबियां उठाई जाती हैं और पहले ऑर्डर किया जाता है !!!
फिर जॉइन वहां से आगे बढ़ सकते हैं, आशा है कि केवल 10 लोकेशन_आईड्स का उपयोग करें।
सबक्वेरी k
. में क्या मदद करेगा? एक इंडेक्स है जिसमें location_id और location_type_id होते हैं
ALTER TABLE location ADD INDEX id_type_ndx (location_id,location_type_id);
यहाँ कुछ और है जो आपको इस दृष्टिकोण के बारे में पसंद आ सकता है
आप अगले 10 आईडी (आईडी 11 - 20) के लिए कैसे पूछताछ करते हैं? इस तरह:
SELECT l.location_id, l.location_name,
t.type_id, t.type_name,
i.location_address, i.location_phone
FROM
(SELECT location_id,location_type_id FROM location
ORDER BY location_id LIMIT 10,10) AS k
LEFT JOIN location AS l ON (k.location_id = l.location_id)
LEFT JOIN location_information AS i ON (k.location_id = i.location_id)
LEFT JOIN location_types AS t ON (l.location_type_id = t.type_id)
;
आपको बस इतना करना है कि LIMIT
को बदल दें सबक्वेरी में क्लॉज k
प्रत्येक नए पृष्ठ के साथ।
LIMIT 20,10
LIMIT 30,10
- और इसी तरह...
मैं स्थान तालिका को हटाकर रिफैक्टरिंग में सुधार कर सकता हूं और सबक्वायरी k इस तरह आवश्यक फ़ील्ड ले जा सकता है:
SELECT k.location_id, k.location_name,
t.type_id, t.type_name,
i.location_address, i.location_phone
FROM
(SELECT location_id,location_type_id,location_name
FROM location ORDER BY location_id LIMIT 10,10) AS k
LEFT JOIN location_information AS i ON (k.location_id = i.location_id)
LEFT JOIN location_types AS t ON (k.location_type_id = t.type_id)
;
इस संस्करण के लिए अतिरिक्त अनुक्रमणिका बनाना आवश्यक नहीं होगा।
इसे आज़माएं !!!