উত্তর:
দুটি বাক্য গঠন ফর্মগুলি কিছুটা বিভ্রান্তিকর কারণ তারা সংখ্যার বিপরীত:
LIMIT <skip>, <count>
এর সমতুল্য:
LIMIT <count> OFFSET <skip>
এটি মাইএসকিউএল এবং পোস্টগ্রেএসকিউএল থেকে সিনট্যাক্সের সাথে সামঞ্জস্যপূর্ণ। মাইএসকিউএল উভয় সিনট্যাক্স ফর্মকে সমর্থন করে এবং এর ডক্স দাবি করে যে অফসেটের সাথে দ্বিতীয় সিনট্যাক্সটি পোস্টগ্র্রেএসকিউএল এর সাথে সামঞ্জস্যতা প্রদান করে to পোস্টগ্রেএসকিউএল ডক্স দেখায় এটি কেবল দ্বিতীয় সিনট্যাক্সকে সমর্থন করে এবং এসকিউএলাইটের ডক্স দেখায় যে এটি উভয়কেই সমর্থন করে, বিভ্রান্তি এড়াতে দ্বিতীয় বাক্য গঠনের প্রস্তাব দেয়।
যাইহোক, প্রথমে অর্ডার ব্যবহার না করেই সীমাবদ্ধতা ব্যবহার করা আপনাকে সর্বদা আপনার পছন্দসই ফলাফল দেয় না। অনুশীলনে, এসকিউএলাইট কিছু ক্রমে সারিগুলি ফিরিয়ে দেবে, সম্ভবত তারা ফাইলে কীভাবে শারীরিকভাবে সংরক্ষণ করা হয় তা দ্বারা নির্ধারিত হয়। তবে এর অর্থ এই নয় যে এটি আপনি যে ক্রমটি চান সেভাবেই হয়। অনুমানযোগ্য আদেশ পাওয়ার একমাত্র উপায় হ'ল অর্ডার স্পষ্টভাবে ব্যবহার করা ly
LIMIT <count> OFFSET <skip>
আরও পরিষ্কার। ধন্যবাদ.
পরেরটি হ'ল একটি সতর্কতামূলক বিকল্প বিকল্প বাক্য :
যদি অফসেট কীওয়ার্ডের পরিবর্তে কমা ব্যবহার করা হয় তবে অফসেটটি প্রথম সংখ্যা এবং সীমাটি দ্বিতীয় সংখ্যা। এই আপাত বিপরীতটি ইচ্ছাকৃত - এটি উত্তরাধিকারী এসকিউএল ডাটাবেস সিস্টেমগুলির সাথে সামঞ্জস্যতা সর্বাধিক করে তোলে।
আমি কিছু পরীক্ষা করেছি এবং পারফরম্যান্সে কোনও পার্থক্য নেই।
এটি কেবলমাত্র অন্যান্য এসকিএল ভাষার সাথে সামঞ্জস্যের জন্য।
উভয় সংস্করণ চলমান সময় একই।
আমি 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 এ পরিবর্তিত হয়