কম্পিউটার টিউটোরিয়াল

MySQL COUNT DISTINCT ধীর গতিতে চলছে? দ্রুত করার উপায়

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 চালিয়ে ইন্ডেক্স পরিসংখ্যান আপডেট রাখুন।
  1. MySQL-এ COUNT(*) এবং GROUP BY ব্যবহার করে সর্বোচ্চ ফ্রিকোয়েন্সি वाला নাম বের করা

  2. MySQL-এ জানা দISTINCT ভ্যালুগুলোর ফ্রিকোয়েন্সি কাউন্ট করা (SUM)

  3. MySQL-এ অনন্য (Distinct) ভ্যালু এবং তাদের কাউন্ট বের করা

  4. MySQL-এ ইন্ডেক্স তৈরি করে SELECT DISTINCT পারফরম্যান্স বাড়ানো