"सीमा 1000,25" बनाम "सीमा 25 ऑफसेट 1000"


11

हाल ही में मुझे पता चला है कि MySQL में एक offsetसुविधा है। मैं ऑफसेट के परिणामों, या ऑफसेट और सीमा संस्करण के बीच के अंतर के बारे में दस्तावेज़ीकरण खोजने की कोशिश कर रहा हूं, लेकिन मुझे वह नहीं मिल रहा है जिसकी मुझे तलाश है।

मान लीजिए कि मेरे पास तालिका में 10.000 पंक्तियाँ हैं और मुझे पंक्ति 1.000 से 25 परिणाम चाहिए। जहां तक ​​मुझे मिला है, मैं दोनों को एक ही परिणाम प्राप्त करने के लिए कर सकता हूं:

SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000

मैं जानना चाहता हूं कि दोनों में क्या अंतर है।

  • क्या यह वास्तव में ऐसा ही है या मेरी समझ गलत है?
  • एक बड़ा टेबल में धीमी / तेज है
  • जब मैं करता हूं तो ऑफसेट परिवर्तन का परिणाम होता है WHERE column=1(कहते हैं कि कॉलम में> 100 अलग-अलग मूल्य हैं)
  • जब मैं करता हूं तो ऑफसेट परिवर्तन का परिणाम होता है ORDER BY column ASC(मान लें कि इसमें यादृच्छिक मान हैं)

यदि यह एक 'मूर्खतापूर्ण' सवाल है और कोई व्यक्ति किसी भी विषय को जानने वाले दस्तावेज को जानता है, तो कृपया उन्हें उत्तर में जोड़ें।
मैं महसूस कर रहा हूँ ऑफसेट डेटाबेस में पाया पहली एक्स पंक्तियों को छोड़ देता है, छँटाई और कहाँ की उपेक्षा।


MySQL प्रलेखन यह पूरी तरह से समझाता है। क्या कोई कारण है कि आप इसे स्वयं देखने में रुचि नहीं ले रहे थे?
सिराइड करें

1
"PostgreSQL के साथ संगतता के लिए, MySQL भी LIMIT row_count OFFSET ऑफसेट सिंटैक्स का समर्थन करता है।" ( dev.mysql.com/doc/refman/5.5/en/select.html से )।
सिराइड करें

क्योंकि यह अभी भी मेरे सवालों का जवाब नहीं है। आपके उद्धरण (और पृष्ठ पर उनके पाठ) से मुझे यह निष्कर्ष निकालना चाहिए कि ऑफसेट एक ही चीज है जो सीमा में है, केवल अलग तरीके से लिखी गई है, जैसे कि LIMIT शॉर्टहैंड चयनकर्ता है?
मार्टि

1
एक ही चीज़ को व्यक्त करने के लिए यह अलग वाक्यविन्यास है। आपके अन्य उप प्रश्न शीर्षक और आपकी पोस्ट के पहले भाग से पूरी तरह से अलग हैं।
बजे

1
मैं समझता हूं कि यदि यह एक ही बात है, तो अन्य प्रश्नों को किसी भी स्थिति में अलग तरह से प्रभावित नहीं किया जाएगा। मुझे यकीन नहीं था कि यह वही बात थी, यही जवाब मुझे तलाश था, धन्यवाद।
मार्टिज़न

जवाबों:


9

ऑपरेशन के संदर्भ में

SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000

बयानों में बिल्कुल कोई अंतर नहीं है

@ श्रीमान की टिप्पणी ठीक यही है।

LIMIT 1000,25 माध्यम LIMIT 25 OFFSET 1000

उसी डॉक्यूमेंटेशन से

LIMIT row_count के बराबर है LIMIT 0, row_count

आपका वास्तविक प्रश्न

  • क्या यह वास्तव में ऐसा ही है या मेरी समझ गलत है?
  • एक बड़ा टेबल में धीमी / तेज है

चूंकि दोनों प्रश्न समान हैं, इसलिए कोई अंतर नहीं है

  • जब मैं WHERE स्तंभ = 1 करता हूं, तो ऑफ़सेट परिवर्तन का परिणाम होता है (कहते हैं कि स्तंभ में> 100 अलग-अलग मान हैं)
  • जब मैं ASC स्तंभ द्वारा आदेश करता हूं तो ऑफसेट परिवर्तन का परिणाम होता है (मान लें कि इसमें यादृच्छिक मान हैं)

उपयोग करने से LIMITकोई परिणाम सेट नहीं बदलता है। वे बस परिणाम सेट के भीतर नेविगेट करते हैं।

यह प्रश्न

SELECT id,name,description FROM tablename ORDER BY id LIMIT 1000,25

से अलग होगा

SELECT * FROM (SELECT id,name,description FROM tablename LIMIT 1000,25) A ORDER BY id;

क्योंकि सीमा को एक अलग स्तर पर लागू किया जा रहा है।

यदि टैबलनेम की 1000 पंक्तियाँ कम हैं, तो पहली क्वेरी कुछ भी नहीं देती है

यदि उपकुंजी में 1000 पंक्तियाँ कम हैं तो दूसरी क्वेरी कुछ भी नहीं देती है

निष्कर्ष

आपको यह सुनिश्चित करने के लिए क्वेरी को मूर्तिकला करना होगा कि आप सही स्तर पर डेटा सॉर्ट कर रहे हैं


1
धन्यवाद। यह: "बयानों में बिल्कुल कोई अंतर नहीं है" ठीक वही था जो मैं देख रहा था, और उस जानकारी के साथ मैं उस छँटाई को देख सकता हूँ या जहाँ कोई बात नहीं है। वेदर के बारे में निश्चित नहीं था कि यह एक ही बात थी, और शैतान को कोडिंग में विवरण में है, मैं निश्चित रूप से जानना चाहूंगा :)
मार्टिज़न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.