বড় সিলেক্ট কোয়েরি খণ্ডে খণ্ডে পেতে ORDER BY LIMIT ব্যবহার করতে হয়। সিনট্যাক্স নিচে দেওয়া হলো:
SELECT *FROM yourTableName ORDER BY yourColumnName LIMIT 0,10;
উপরের সিনট্যাক্স থেকে টেবিল থেকে ১০টি সারি পাওয়া যাবে। এখানে 0 মানে রেজাল্ট সেটের প্রথম সারি (জিরো-ইন্ডেক্স বেসড)। LIMIT-এর দ্বিতীয় মান মানে টেবিল থেকে সর্বোচ্চ কতগুলো সারি রিট্রিভ করা যাবে।
যদি ১০ এর পরের সারি ৩০ পর্যন্ত চান, তবে LIMIT এভাবে ব্যবহার করুন। সিনট্যাক্স নিচে দেওয়া হলো:
SELECT *FROM yourTableName ORDER BY yourColumnName LIMIT 10,20; //11 to 30
যদি ৩০ থেকে ৫০ পর্যন্ত আরেক সেট সারি চান, তবে আবার LIMIT ব্যবহার করুন:
SELECT *FROM yourTableName ORDER BY yourColumnName LIMIT 30 ,20; 31 to 50.
এই কাজের জন্য টেম্পোরারি টেবিল ব্যবহার করা ভালো। সিনট্যাক্স নিচে দেওয়া হলো:
DROP TEMPORARY TABLE IF EXISTS yourTemporaryTableName; CREATE TEMPORARY TABLE yourTempTableName AS ( SELECT *FROM yourOriginalTableName ORDER BY LIMIT 0,100 );
যদি সব রেকর্ড টেম্পোরারি টেবিলে থাকে, তবে উপরের মত LIMIT ব্যবহার করে টেম্পোরারি টেবিল থেকে রেকর্ড বের করুন।
SELECT *FROM yourTemporaryTableName LIMIT 0,100; SELECT *FROM yourTemporaryTableName LIMIT 100,1000;
এখন আপনার ইচ্ছা অনুযায়ী লিমিট ভ্যালু সেট করুন। এখন টেম্পোরারি টেবিল ড্রপ করা একটি ভালো অভ্যাস। কোয়েরিটি হলো:
DROP TEMPORARY TABLE yourTemporaryTableName;
উপরের আলোচনার ডেমো নিচে দেওয়া হলো। প্রথমে একটি টেবিল তৈরি করা যাক। টেবিল তৈরির কোয়েরি:
mysql> create table getRecordsDemo -> ( -> Id int NOT NULL AUTO_INCREMENT, -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (1.68 sec)
ইনসার্ট কমান্ড দিয়ে কিছু রেকর্ড ইনসার্ট করা যাক। কোয়েরিটি হলো:
mysql> insert into getRecordsDemo values(),(),()... (738 rows); Query OK, 738 rows affected (0.34 sec)
উপরের টেবিলের মতো একটি টেম্পোরারি টেবিল তৈরি করা যাক। টেম্পোরারি টেবিল তৈরির কোয়েরি:
mysql> drop temporary table if exists TempRecord; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> create temporary table TempRecord -> as -> ( -> select * from getRecordsDemo order by Id limit 0,738 -> ); Query OK, 738 rows affected (0.03 sec) Records: 738 Duplicates: 0 Warnings: 0
এখন টেম্পোরারি টেবিল থেকে LIMIT ক্লজ ব্যবহার করে খণ্ডে খণ্ডে রেজাল্ট পাওয়া যাক।
কেস ১: টেম্পোরারি টেবিল TempRecord থেকে কিছু রেকর্ড পাওয়ার কোয়েরি:
mysql> select *from TempRecord limit 0,10;
আউটপুট:
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +----+ 10 rows in set (0.00 sec)
কেস ২: পরবর্তী সেট রেকর্ড পাওয়ার কোয়েরি:
mysql> select *from TempRecord limit 10,20;
আউটপুট (১১ থেকে ৩০): ২০ সারি।
কেস ৩: আরেক সেট রেকর্ড পাওয়ার কোয়েরি:
mysql> select *from TempRecord limit 30,20;
আউটপুট (৩১ থেকে ৫০): ২০ সারি।
ব্যাখ্যা: বড় ডেটাসেট পেজিনেশন বা ব্যাচ প্রসেসিং-এ LIMIT offset, count ব্যবহার করা стандар্ড পদ্ধতি। টেম্পোরারি টেবিল ব্যবহার করে একবার সর্টেড ডেটা স্টোর করলে বারবার বড় টেবিলে ORDER BY রান করার প্রয়োজন নেই, পারফরম্যান্স বাড়ে। MySQL 8.0+ এ CTE (Common Table Expression) ও ব্যবহার করা যায়।