MySQL-এ COUNT(DISTINCT column) কোয়েরি বড় ডেটাসেটে ধীর হতে পারে। এটি দ্রুত করার সবচেয়ে কার্যকর উপায় হলো উপযুক্ত ইন্ডেক্স (INDEX) তৈরি করা। নিচে ধাপে ধাপে উদাহরণ দেওয়া হলো।
টেবিল তৈরি এবং কম্পোজিট ইন্ডেক্স যোগ করা
প্রথমে একটি ডেমো টেবিল তৈরি করি যেখানে FirstName এবং LastName কলামের ওপর একটি কম্পোজিট ইন্ডেক্স থাকবে:
mysql> CREATE TABLE DemoTable1905 (
FirstName VARCHAR(20),
LastName VARCHAR(20),
INDEX F_L_Name (FirstName, LastName)
);
নমুনা ডেটা ঢুকানো
mysql> INSERT INTO DemoTable1905 VALUES ('John','Smith');
mysql> INSERT INTO DemoTable1905 VALUES ('John','Doe');
mysql> INSERT INTO DemoTable1905 VALUES ('Adam','Smith');
mysql> INSERT INTO DemoTable1905 VALUES ('John','Doe');
mysql> INSERT INTO DemoTable1905 VALUES ('Chris','Brown');
mysql> INSERT INTO DemoTable1905 VALUES ('Adam','Smith');
ডেটা যাচাই
mysql> SELECT * FROM DemoTable1905;
আউটপুট:
+-----------+----------+ | FirstName | LastName | +-----------+----------+ | Adam | Smith | | Adam | Smith | | Chris | Brown | | John | Doe | | John | Doe | | John | Smith | +-----------+----------+ 6 rows in set (0.00 sec)
DISTINCT কাউন্ট কোয়েরি (ইন্ডেক্স সহ দ্রুত)
mysql> SELECT COUNT(DISTINCT FirstName) FROM DemoTable1905;
আউটপুট:
+---------------------------+ | count(distinct FirstName) | +---------------------------+ | 3 | +---------------------------+ 1 row in set (0.00 sec)
কেন এটি দ্রুত হয়?
- কম্পোজিট ইন্ডেক্স
(FirstName, LastName)MySQL-কেFirstNameএর অনন্য মানগুলো দ্রুত খুঁজে বের করতে সাহায্য করে। - ইন্ডেক্স ছাড়া MySQL পুরো টেবিল স্ক্যান করে, যা বড় টেবিলে খুব ধীর।
অতিরিক্ত টিপস
- যদি শুধু
FirstNameকাউন্ট করতে হয়, তবে সিঙ্গেল-কলাম ইন্ডেক্সINDEX idx_fname (FirstName)পর্যাপ্ত। - অনুমানিক (approximate) কাউন্ট দরকার হলে
APPROX_COUNT_DISTINCT()(MySQL 8.0.13+) ব্যবহার করুন। - নियमিত
ANALYZE TABLEচালিয়ে ইন্ডেক্স পরিসংখ্যান আপডেট রাখুন।