স্ক্লাইট সীমাবদ্ধ / অফসেট কোয়েরি


153

স্ক্লাইটের সাথে আমার সহজ প্রশ্ন আছে। এর মধ্যে পার্থক্য কী:

Select * from Animals LIMIT 100 OFFSET 50

এবং

Select * from Animals LIMIT 100,50

9
আপনি মন্তব্যগুলিতে উল্লিখিত হিসাবে এটি আপনার সন্দেহগুলি মুছে ফেলেছে দয়া করে উত্তর হিসাবে চিহ্নিত করুন।
মুবাশার

উত্তর:


270

দুটি বাক্য গঠন ফর্মগুলি কিছুটা বিভ্রান্তিকর কারণ তারা সংখ্যার বিপরীত:

LIMIT <skip>, <count>

এর সমতুল্য:

LIMIT <count> OFFSET <skip>

এটি মাইএসকিউএল এবং পোস্টগ্রেএসকিউএল থেকে সিনট্যাক্সের সাথে সামঞ্জস্যপূর্ণ। মাইএসকিউএল উভয় সিনট্যাক্স ফর্মকে সমর্থন করে এবং এর ডক্স দাবি করে যে অফসেটের সাথে দ্বিতীয় সিনট্যাক্সটি পোস্টগ্র্রেএসকিউএল এর সাথে সামঞ্জস্যতা প্রদান করে to পোস্টগ্রেএসকিউএল ডক্স দেখায় এটি কেবল দ্বিতীয় সিনট্যাক্সকে সমর্থন করে এবং এসকিউএলাইটের ডক্স দেখায় যে এটি উভয়কেই সমর্থন করে, বিভ্রান্তি এড়াতে দ্বিতীয় বাক্য গঠনের প্রস্তাব দেয়।

যাইহোক, প্রথমে অর্ডার ব্যবহার না করেই সীমাবদ্ধতা ব্যবহার করা আপনাকে সর্বদা আপনার পছন্দসই ফলাফল দেয় না। অনুশীলনে, এসকিউএলাইট কিছু ক্রমে সারিগুলি ফিরিয়ে দেবে, সম্ভবত তারা ফাইলে কীভাবে শারীরিকভাবে সংরক্ষণ করা হয় তা দ্বারা নির্ধারিত হয়। তবে এর অর্থ এই নয় যে এটি আপনি যে ক্রমটি চান সেভাবেই হয়। অনুমানযোগ্য আদেশ পাওয়ার একমাত্র উপায় হ'ল অর্ডার স্পষ্টভাবে ব্যবহার করা ly


2
LIMIT <count> OFFSET <skip>আরও পরিষ্কার। ধন্যবাদ.
গিডো মোচা

যদি সারিগুলির ক্রমের বিষয়টি বিবেচনা করে তবে এই একই উত্তরটির ভাল পারফরম্যান্স সহ একটি ভাল সমাধান রয়েছে। stackoverflow.com/a/28860492/5016333
রদ্রিগো ভি

23

পরেরটি হ'ল একটি সতর্কতামূলক বিকল্প বিকল্প বাক্য :

যদি অফসেট কীওয়ার্ডের পরিবর্তে কমা ব্যবহার করা হয় তবে অফসেটটি প্রথম সংখ্যা এবং সীমাটি দ্বিতীয় সংখ্যা। এই আপাত বিপরীতটি ইচ্ছাকৃত - এটি উত্তরাধিকারী এসকিউএল ডাটাবেস সিস্টেমগুলির সাথে সামঞ্জস্যতা সর্বাধিক করে তোলে।


5

আমি কিছু পরীক্ষা করেছি এবং পারফরম্যান্সে কোনও পার্থক্য নেই।

এটি কেবলমাত্র অন্যান্য এসকিএল ভাষার সাথে সামঞ্জস্যের জন্য।

উভয় সংস্করণ চলমান সময় একই।

আমি 100000 সারি দিয়ে টেবিল 1 দিয়ে স্ক্লাইট ডিবি তৈরি করেছি। আমি পরের পরীক্ষা চালাচ্ছি

long timeLimitOffset = 0;
long timeLimitComma = 0;
for (int i = 0; i < 100000; i++)
{
   //first version
   timeLimitOffset += SqlDuraction("Select * from table1  order by col1 LIMIT " + (i + 1) + " OFFSET " + (1001 - i) + "");
   // second version
   timeLimitComma += SqlDuraction("Select * from table1 order by col1 LIMIT " + (1001 - i) + " , " + (i + 1) + "");
}

টাইমস এক সেকেন্ডের 0.001 এ পরিবর্তিত হয়


1
পারফরম্যান্সে কেন কোনও পার্থক্য থাকবে? তারা একই!
অভিনব গৌনিয়াল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.