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

MySQL Benchmark-এ একাধিক সারি রিটার্ন হলে এরর সমাধান

বেঞ্চমার্ক-এ একাধিক সারি রিটার্ন করলে এরর হবে। একাধিক সারির পরিবর্তে স্কেলার ভ্যালু বা একক সারি রিটার্ন করুন। সিনট্যাক্স নিচে দেওয়া হলো:

SELECT yourColumnName FROM yourTableName WHERE yourCondition.

এটি বুঝতে একটি টেবিল তৈরি করা যাক। টেবিল তৈরির কোয়েরি:

mysql> create table UserDemo   
    -> (   
    -> UserId int,   
    -> UserName varchar(20),   
    -> RegisteredCourse varchar(10)   
    -> ); Query OK, 0 rows affected (0.67 sec)

ইনসার্ট কমান্ড দিয়ে কিছু রেকর্ড ইনসার্ট করা যাক। কোয়েরিটি হলো:

mysql> insert into UserDemo values(1,'John','Java'); Query OK, 1 row affected (0.16 sec) mysql> insert into UserDemo values(2,'Larry','C'); Query OK, 1 row affected (0.21 sec) mysql> insert into UserDemo values(3,'Carol','C++'); Query OK, 1 row affected (0.11 sec) mysql> insert into UserDemo values(4,'Mike','C#'); Query OK, 1 row affected (0.17 sec)

সিলেক্ট স্টেটমেন্ট দিয়ে সব রেকর্ড দেখানো যাক। কোয়েরিটি হলো:

mysql> select *from UserDemo;

আউটপুট নিচে দেওয়া হলো:

+--------+----------+------------------+ | UserId | UserName | RegisteredCourse | +--------+----------+------------------+ |      1 | John     | Java             | |      2 | Larry    | C                | |      3 | Carol    | C++              | |      4 | Mike     | C#               | +--------+----------+------------------+ 4 rows in set (0.00 sec)

আপনার বেঞ্চমার্ক এরর নিচে দেওয়া হলো:

mysql> select benchmark(1000,(select RegisteredCourse from UserDemo)); ERROR 1242 (21000): Subquery returns more than 1 row

যেহেতু সাবকোয়েরি একাধিক সারি রিটার্ন করেছে, তাই আপনাকে একক সারি রিটার্ন করতে হবে। কোয়েরিটি হলো:

mysql> select RegisteredCourse from UserDemo where UserId=1;

আউটপুট নিচে দেওয়া হলো:

+------------------+ | RegisteredCourse | +------------------+ | Java | +------------------+ 1 row in set (0.00 sec)

ব্যাখ্যা: BENCHMARK(count, expr) ফাংশনে expr এক এক্সপ্রেশন হতে হবে যা একক ভ্যালু (স্কেলার) রিটার্ন করে। সাবকোয়েরি যদি একাধিক সারি রিটার্ন করে, তবে ERROR 1242 হয়। সমাধান: সাবকোয়েরিতে LIMIT 1 যোগ করুন বা নির্দিষ্ট কন্ডিশন (যেমন WHERE UserId=1) দিয়ে একক সারি নিশ্চিত করুন। পারফরম্যান্স টেস্টিং-এ BENCHMARK ব্যবহার করা হয় কিন্তু প্রোডাকশনে এটি রিকমেন্ডেড নয়।

  1. MySQL-এ ইনডেক্স ব্যবহার করে একাধিক রো দ্রুত সিলেক্ট করা

  2. MySQL-এ একাধিক টেবিল থেকে COUNT(*) একসাথে বের করা (DUAL টেবিল ব্যবহার করে)

  3. MySQL-এ UNIQUE কনস্ট্রেইন্ট ব্যবহার করে রো ইউনিক নিশ্চিত করুন

  4. MySQL-এ নির্দিষ্ট শর্ত অনুযায়ী সিঙ্গেল রো বের করা