MySQL NULL ব্যাখ্যা: অর্থ, কুয়েরি, ফাংশন, ইনডেক্সিং, সোর্টিং এবং সেরা অনুশীলন

目次

১. পরিচিতি

MySQL একটি ডাটাবেস ম্যানেজমেন্ট সিস্টেম যা অনেক অ্যাপ্লিকেশন এবং সিস্টেমে ব্যবহৃত হয়। MySQL-এর মধ্যে NULL এর ধারণা হলো এমন একটি বিষয় যা নতুনদের জন্য বোঝা কঠিন হতে পারে। NULL কী এবং এটি কীভাবে হ্যান্ডেল করতে হয় তা সঠিকভাবে বোঝা MySQL-এর সাথে কাজ করার সময় অত্যন্ত গুরুত্বপূর্ণ।

এই নিবন্ধে, আমরা NULL-এর মৌলিক সংজ্ঞা থেকে শুরু করে এটি কীভাবে ম্যানিপুলেট করতে হয়, এর সাথে সার্চ করতে হয়, NULL-সম্পর্কিত উপযোগী ফাংশন এবং সতর্কতার জন্য গুরুত্বপূর্ণ পয়েন্টগুলোর একটি বিস্তারিত ব্যাখ্যা প্রদান করছি। আমরা NULL-এর সাধারণ প্রশ্নের উত্তর দেয়া একটি FAQ বিভাগও অন্তর্ভুক্ত করেছি।

এই নিবন্ধটি নিম্নলিখিত পাঠকদের জন্য উপযোগী:

  • প্রথমবার MySQL ব্যবহারকারী নতুনরা
  • মৌলিক SQL বোঝা মধ্যবর্তী শিক্ষার্থীরা যারা আরও গভীরভাবে শিখতে চান
  • ডাটাবেস ডিজাইন এবং অপারেশনে জড়িত ইঞ্জিনিয়াররা

এই নিবন্ধের শেষে আপনি পারবেন:

  • NULL কী তা সঠিকভাবে বোঝার
  • NULL সহকারে ডেটা ম্যানিপুলেট এবং সার্চ করার
  • NULL-সম্পর্কিত সমস্যা এড়ানোর জন্য সেরা প্র্যাকটিস শেখার

এখন, চলুন NULL-এর মৌলিক বিষয়গুলো ধাপে ধাপে দেখি।

২. NULL এর মৌলিক বিষয়

ডাটাবেসের সাথে কাজ করার সময় NULL এর ধারণা অত্যন্ত গুরুত্বপূর্ণ। তবে, NULL হলো সবচেয়ে সাধারণভাবে ভুল বোঝা উপাদানগুলোর একটি। এই বিভাগে, আমরা MySQL-এ NULL-এর মৌলিক সংজ্ঞা এবং বৈশিষ্ট্যগুলো বিস্তারিতভাবে ব্যাখ্যা করছি।

NULL এর সংজ্ঞা

NULL একটি বিশেষ অবস্থা প্রতিনিধিত্ব করে যা অর্থ “কোনো মান নেই” বা “অজানা মান”। এটি খালি স্ট্রিং (“”) বা শূন্য (০) থেকে ভিন্ন। এখানে পার্থক্য দেখানোর একটি উদাহরণ দেয়া হলো:

  • NULL : কোনো মান নেই (অসংজ্ঞায়িত অবস্থা)
  • খালি স্ট্রিং (“”) : একটি মান আছে, কিন্তু তার কনটেন্ট খালি
  • শূন্য (০) : একটি মান আছে, এবং সেই মান ০

NULL এর বৈশিষ্ট্য

  1. তুলনায় NULL এর আচরণ SQL-এ, NULL বিশেষ নিয়ম দিয়ে হ্যান্ডেল করা হয়। উদাহরণস্বরূপ, এই তুলনাগুলোর ফলাফল লক্ষ্য করুন:
    SELECT NULL = NULL; -- Result: NULL
    SELECT NULL <> NULL; -- Result: NULL
    SELECT NULL IS NULL; -- Result: TRUE
    
  • সাধারণ তুলনা অপারেটর (=, <, > ইত্যাদি) দিয়ে NULL তুলনা করলে ফলাফল NULL হয়।
  • NULL সঠিকভাবে মূল্যায়ন করতে, আপনাকে IS NULL বা IS NOT NULL ব্যবহার করতে হবে ।
  1. অংকগণিত অপারেশনে NULL যেকোনো অংকগণিত অপারেশন যাতে NULL অন্তর্ভুক্ত থাকে সর্বদা NULL ফেরত দেয়। উদাহরণ:
    SELECT 10 + NULL; -- Result: NULL
    SELECT NULL * 5; -- Result: NULL
    
  1. NULL সহ লজিক্যাল অপারেশন যখন একটি শর্তে NULL অন্তর্ভুক্ত থাকে, তখন ফলাফলও NULL হয়ে যেতে পারে। নিচের উদাহরণগুলো দেখুন:
    SELECT NULL AND TRUE; -- Result: NULL
    SELECT NULL OR FALSE; -- Result: NULL
    

কেন NULL সমস্যা সৃষ্টি করে

যদি আপনি NULL সঠিকভাবে হ্যান্ডেল না করেন, তাহলে আপনি এমন সমস্যায় পড়তে পারেন যেমন:

  • অপ্রত্যাশিত সার্চ ফলাফল উদাহরণস্বরূপ, নিম্নলিখিত কোয়েরি age যেখানে NULL সেখানকার রোগুলো বাদ দেয়।
    SELECT * FROM users WHERE age > 20;
    

একটি সমাধান হিসেবে, আপনাকে শর্তে NULL অন্তর্ভুক্ত করতে হবে:

SELECT * FROM users WHERE age > 20 OR age IS NULL;
  • গণনা ভুল এবং খালি ডেটা ভুল বোঝা অ্যাগ্রিগেট ফাংশন (SUM, AVG ইত্যাদি) গণনা করার সময় NULL উপেক্ষা করে। ফলে, অনেক NULL মান সহ ডেটাসেট অপ্রত্যাশিত ফলাফল উৎপন্ন করতে পারে।

মৌলিক NULL নিয়মের সারাংশ

  • NULL “কোনো মান নেই” এমন একটি অবস্থা প্রতিনিধিত্ব করে।
  • সাধারণ তুলনা অপারেটর NULL সঠিকভাবে হ্যান্ডেল না করায়, IS NULL বা IS NOT NULL ব্যবহার করুন ।
  • যদি অংকগণিত বা লজিক্যাল অপারেশনে NULL অন্তর্ভুক্ত থাকে, তাহলে ফলাফলও NULL হয়ে যায়।

৩. NULL কীভাবে ম্যানিপুলেট করবেন

MySQL-এ NULL-এর সাথে কাজ করার সময়, আপনাকে এটি সঠিকভাবে হ্যান্ডেল করার সঠিক উপায়গুলো বোঝতে হবে। এই বিভাগে, আমরা ডেটা ইনসার্ট, আপডেট এবং ডিলিট করার সময় NULL-এর জন্য নির্দিষ্ট পদ্ধতিগুলো বিস্তারিতভাবে ব্যাখ্যা করছি।

ডেটা ইনসার্ট করার সময় NULL সেট করার উপায়

ডাটাবেসে একটি নতুন রেকর্ড ইনসার্ট করার সময়, আপনি একটি কলামকে NULL সেট করতে পারেন। নিচে কংক্রিট উদাহরণ দেয়া হলো।

  • স্পষ্টভাবে NULL নির্দিষ্ট করুন
    INSERT INTO users (name, age) VALUES ('Taro', NULL);
    

এই ক্যোয়ারিতে, age কলামে কোনো মান দেওয়া হয়নি, এবং NULL ইনসার্ট করা হয়েছে।

  • NULL as the default value যদি NULL ডিফল্ট মান হিসেবে কনফিগার করা থাকে, তাহলে মান বাদ দেওয়া হলে স্বয়ংক্রিয়ভাবে NULL ইনসার্ট হবে।
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50),
        age INT DEFAULT NULL
    );
    
    INSERT INTO users (name) VALUES ('Hanako');
    

এই উদাহরণে, age কলামের জন্য কোনো স্পষ্ট মান প্রদান করা হয়নি, তাই ডিফল্ট NULL ইনসার্ট হয়েছে।

ডেটা আপডেট করার সময় NULL সেট করার উপায়

আপনি বিদ্যমান ডেটাও আপডেট করে একটি কলামের মান NULL সেট করতে পারেন। এখানে উদাহরণ রয়েছে।

  • একটি মানকে NULL আপডেট করুন
    UPDATE users SET age = NULL WHERE name = 'Taro';
    

এই ক্যোয়ারি “Taro” নামের রেকর্ডের জন্য age কলামকে NULL সেট করে।

  • শর্তসাপেক্ষ আপডেট আপনি নির্দিষ্ট পরিস্থিতিতে NULL সেট করার জন্য শর্ত যোগ করতে পারেন।
    UPDATE users SET age = NULL WHERE age < 18;
    

এখানে, যেখানে বয়স ১৮-এর কম, সেখানকার সব রেকর্ডের জন্য age কলাম NULL সেট করা হয়েছে।

ডেটা মুছে ফেলার সময় NULL-কে শর্ত হিসেবে ব্যবহার করার উপায়

NULL সহ ডেটা মুছে ফেলার সময়, আপনাকে শর্তে NULL অন্তর্ভুক্ত করতে হবে। তুলনা অপারেটর নয়, IS NULL ব্যবহার করুন।

  • যেখানে একটি কলাম NULL, সেখানকার সারি মুছুন
    DELETE FROM users WHERE age IS NULL;
    

এই ক্যোয়ারি age কলাম যেখানে NULL, সেখানকার রেকর্ড মুছে ফেলে।

  • একাধিক শর্ত সহ NULL সারি মুছুন
    DELETE FROM users WHERE age IS NULL AND name = 'Taro';
    

এই উদাহরণে, শুধুমাত্র যেখানে age NULL এবং name “Taro”, সেখানকার রেকর্ড মুছে ফেলা হয়।

NULL ম্যানিপুলেট করার সময় গুরুত্বপূর্ণ নোট

  1. সঠিকভাবে IS NULL ব্যবহার করুন শর্তে NULL ব্যবহার করার সময়, সর্বদা IS NULL বা IS NOT NULL ব্যবহার করুন, = অপারেটর নয়।
    SELECT * FROM users WHERE age = NULL; -- Incorrect
    SELECT * FROM users WHERE age IS NULL; -- Correct
    
  1. NULL হ্যান্ডলিং মনে রেখে আপনার অ্যাপ্লিকেশন ডিজাইন করুন অ্যাপ্লিকেশন থেকে ডেটা ম্যানিপুলেট করার সময়, NULL কীভাবে হ্যান্ডল করবেন সে বিষয়ে সতর্ক থাকা অযাচিত আচরণ প্রতিরোধ করে।
  2. ট্রানজেকশন ব্যবহার করুন NULL জড়িত ডেটা অপারেশনের জন্য, অযাচিত ডেটা পরিবর্তন এড়াতে ট্রানজেকশন ব্যবহার বিবেচনা করুন।

৪. NULL সহ ডেটা অনুসন্ধান করা

MySQL-এ ডেটা অনুসন্ধান করার সময়, NULL সঠিকভাবে হ্যান্ডল করা অত্যন্ত গুরুত্বপূর্ণ। কারণ NULL সাধারণ মান থেকে ভিন্নভাবে আচরণ করে, তাই এটি বিশেষ যত্নের প্রয়োজন। এই বিভাগে, আমরা NULL জড়িত থাকলে কীভাবে দক্ষতার সাথে অনুসন্ধান করবেন তা ব্যাখ্যা করছি।

NULL অনুসন্ধান করার মৌলিক উপায়

NULL অনুসন্ধান করতে, সাধারণ তুলনা অপারেটর (=, <, >) এর পরিবর্তে IS NULL এবং IS NOT NULL ব্যবহার করুন।

  • NULL অনুসন্ধান করুন
    SELECT * FROM users WHERE age IS NULL;
    

এই ক্যোয়ারি age কলাম যেখানে NULL, সেখানকার সব রেকর্ড পুনরুদ্ধার করে।

  • non-NULL মান অনুসন্ধান করুন
    SELECT * FROM users WHERE age IS NOT NULL;
    

এই ক্যোয়ারি age কলাম যেখানে NULL নয়, সেখানকার সব রেকর্ড পুনরুদ্ধার করে।

NULL সহ জটিল শর্ত দিয়ে অনুসন্ধান

কারণ তুলনা অপারেটর দিয়ে NULL সঠিকভাবে হ্যান্ডল করা যায় না, তাই জটিল শর্তে এটি ব্যবহার করার সময় যত্ন নিন।

  • শর্তে NULL অন্তর্ভুক্ত করা
    SELECT * FROM users WHERE age > 20 OR age IS NULL;
    

এই ক্যোয়ারি age ২০-এর বেশি বা NULL যেখানে, সেখানকার রেকর্ড পুনরুদ্ধার করে।

  • NOT অপারেটর এবং NULL
    SELECT * FROM users WHERE NOT (age > 20 OR age IS NULL);
    

এই ক্যোয়ারি age ২০ বা তার কম এবং NULL নয় যেখানে, সেখানকার রেকর্ড পুনরুদ্ধার করে।

LIKE অপারেটরের সাথে NULL ব্যবহার

LIKE অপারেটর NULL-এর বিরুদ্ধে ব্যবহার করা যায় না। কারণ NULL অর্থ কোনো মান নেই, তাই নিম্নলিখিত ক্যোয়ারি NULL সারি ফেরত দেয় না:

SELECT * FROM users WHERE name LIKE '%a%';
-- NULL values are not matched by this condition

পরিবর্তে, আপনাকে NULL চেক যোগ করতে হবে:

SELECT * FROM users WHERE name LIKE '%a%' OR name IS NULL;

Aggregate functions এবং NULL সহ অনুসন্ধান

অনেক aggregate functions (SUM, AVG, ইত্যাদি) দ্বারা NULL উপেক্ষা করা হয়। সঠিক ফলাফল পেতে, আপনাকে NULL-এর জন্য অ্যাকাউন্ট করতে হবে।

  • COUNT function
    SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;
    
  • COUNT(*) : সমস্ত রেকর্ড গণনা করে, যার মধ্যে NULL থাকা রেকর্ডও অন্তর্ভুক্ত
  • COUNT(column) : NULL বাদ দিয়ে রেকর্ড গণনা করে
  • অন্যান্য সমষ্টি ফাংশনগুলো
    SELECT AVG(age) AS average_age FROM users WHERE age IS NOT NULL;
    

এটি NULL মানগুলো বাদ দিয়ে গড় গণনা করে।

NULL অনুসন্ধানের সময় নোটস

  1. IS NULL এবং = এর পার্থক্য যেহেতু NULL সাধারণ তুলনায় হ্যান্ডেল করা যায় না, তাই সর্বদা IS NULL অথবা IS NOT NULL ব্যবহার করুন।
    SELECT * FROM users WHERE age = NULL; -- Incorrect
    SELECT * FROM users WHERE age IS NULL; -- Correct
    
  1. একাধিক শর্তের পরিচালনা যদি NULL উপস্থিত থাকতে পারে, তবে অনিচ্ছাকৃত ফলাফল এড়াতে শর্তে স্পষ্টভাবে তা অন্তর্ভুক্ত করতে হবে।
    SELECT * FROM users WHERE age > 20; -- NULL is excluded
    SELECT * FROM users WHERE age > 20 OR age IS NULL; -- Includes NULL
    
  1. পারফরম্যান্সের প্রভাব শর্তে NULL অন্তর্ভুক্ত করলে কিছু ক্ষেত্রে ইনডেক্সের ব্যবহার সীমিত হতে পারে। আমরা ইনডেক্সের কার্যকারিতা যাচাই করার সুপারিশ করি।
    EXPLAIN SELECT * FROM users WHERE age IS NULL;
    

সারসংক্ষেপ

NULL সঠিকভাবে অনুসন্ধান করা ইচ্ছাকৃত ফলাফল পেতে অপরিহার্য। যখন NULL অন্তর্ভুক্ত ডেটা অনুসন্ধান করা হয়, তখন যথাযথভাবে IS NULL এবং IS NOT NULL ব্যবহার করুন, এবং পারফরম্যান্স ও ইনডেক্সিং প্রভাবগুলি বিবেচনা করুন।

5. NULL, ইনডেক্স এবং পারফরম্যান্স

ডাটাবেস পারফরম্যান্স অপ্টিমাইজ করতে, ইনডেক্সের সঠিক ব্যবহার অপরিহার্য। তবে, NULL ধারণকারী কলামের উপর করা অপারেশনগুলি ইনডেক্সের দক্ষতাকে প্রভাবিত করতে পারে। এই অংশে আমরা NULL এবং ইনডেক্সের সম্পর্ক, তাদের পারফরম্যান্সের প্রভাব, এবং অপ্টিমাইজেশন কৌশলগুলি ব্যাখ্যা করব।

NULL অন্তর্ভুক্ত কলামে ইনডেক্স তৈরি করা

MySQL-এ, আপনি NULL ধারণকারী কলামে ইনডেক্স তৈরি করতে পারেন। উদাহরণস্বরূপ:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    INDEX (age)
);

এই ক্ষেত্রে, age কলামের উপর ইনডেক্সটি বৈধ থাকে যদিও কলামে NULL মান থাকতে পারে।

IS NULL এবং IS NOT NULL সহ ইনডেক্স ব্যবহার করা

NULL অন্তর্ভুক্ত শর্ত দিয়ে অনুসন্ধান করার সময়, কুয়েরির উপর নির্ভর করে ইনডেক্স ব্যবহার হতে পারে অথবা নাও হতে পারে।

  • যখন ইনডেক্স ব্যবহার হয়
    SELECT * FROM users WHERE age IS NULL;
    

এই কুয়েরিতে, ইনডেক্স ব্যবহার করা যায়, যা কার্যকরী অনুসন্ধানকে সম্ভব করে।

  • যখন ইনডেক্স ব্যবহার হয় না যদি আপনি নিম্নলিখিত মতো জটিল শর্ত ব্যবহার করেন, তবে ইনডেক্স প্রয়োগ নাও হতে পারে।
    SELECT * FROM users WHERE age + 1 IS NULL;
    

ইনডেক্স ব্যবহার হবে কি না তা কুয়েরি শর্তের গঠন উপর নির্ভর করে।

NULL এবং যৌগিক ইনডেক্স

যৌগিক ইনডেক্স ব্যবহার করলেও, NULL ধারণকারী কলামগুলো বিশেষভাবে হ্যান্ডেল করা হয়।

  • যৌগিক ইনডেক্সের উদাহরণ
    CREATE TABLE employees (
        id INT AUTO_INCREMENT PRIMARY KEY,
        department_id INT,
        salary INT,
        INDEX (department_id, salary)
    );
    

যদি department_id NULL হয়, তবে যৌগিক ইনডেক্সের (department_id, salary) একটি অংশ সম্পূর্ণভাবে ব্যবহার নাও হতে পারে।

NULL এর পারফরম্যান্স প্রভাব

  1. ইনডেক্সের কার্যকারিতা
  • NULL শর্ত অন্তর্ভুক্ত অনুসন্ধানগুলো প্রায়শই এখনও ইনডেক্স থেকে উপকৃত হয়। তবে, শর্ত জটিল হলে ইনডেক্সের ব্যবহার সীমিত হতে পারে।
  1. বৃহৎ ডেটা পরিমাণ
  • যদি ইনডেক্সড কলামে অনেক NULL মান থাকে, ইনডেক্সের আকার বৃদ্ধি পেতে পারে এবং সম্ভাব্যভাবে কুয়েরি পারফরম্যান্স কমে যেতে পারে।
  1. অতিরিক্ত NULL এড়ানোর নকশা কৌশল
  • যেসব কলামে প্রায়ই NULL থাকে, সেগুলোর জন্য ডিফল্ট মান নির্ধারণ করে NULL ব্যবহার কমানো পারফরম্যান্স উন্নত করতে পারে।

পারফরম্যান্স অপ্টিমাইজেশন টিপস

  • ইনডেক্স ব্যবহার যাচাই করুন ইনডেক্স প্রয়োগ হয়েছে কি না তা পরীক্ষা করতে EXPLAIN ব্যবহার করুন:
    EXPLAIN SELECT * FROM users WHERE age IS NULL;
    
  • NULL কমাতে নকশা করুন আপনার স্কিমায় NULL এড়াতে NOT NULL সীমাবদ্ধতা এবং ডিফল্ট মান প্রয়োগ করুন:
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        age INT NOT NULL DEFAULT 0
    );
    
  • পুনর্মূল্যায়ন সূচকসমূহ ডেটার পরিমাণ এবং কুয়েরি প্যাটার্নের উপর নির্ভর করে, পারফরম্যান্স অপ্টিমাইজ করতে সূচক যোগ বা অপসারণের কথা বিবেচনা করুন।

সারাংশ

NULL সূচকের সঙ্গে সহাবস্থান করতে পারে, তবে নির্দিষ্ট শর্তে এটি পারফরম্যান্সকে প্রভাবিত করতে পারে। উপযুক্ত সূচক কৌশল ডিজাইন করে এবং NULL ব্যবহারের জন্য স্পষ্ট নীতি নির্ধারণ করে, আপনি কার্যকর ডেটাবেস অপারেশন অর্জন করতে পারেন।

6. NULL এবং সাজানো

MySQL-এ ডেটা সাজানোর সময়, NULL কীভাবে হ্যান্ডেল হয় তা বোঝা গুরুত্বপূর্ণ। কারণ NULL স্বাভাবিক মানের থেকে ভিন্নভাবে আচরণ করে, ডিফল্ট সাজানোর ক্রম এবং কীভাবে তা কাস্টমাইজ করা যায় তা জানা আপনাকে কাঙ্ক্ষিত ফলাফল অর্জনে সহায়তা করে। এই বিভাগে, আমরা NULL দিয়ে সাজানোর মৌলিক নিয়ম এবং উন্নত কৌশলগুলি ব্যাখ্যা করছি।

NULL-এর ডিফল্ট সাজানোর ক্রম

MySQL-এ, NULL নিম্নরূপ হ্যান্ডেল করা হয়:

  • Ascending (ASC) : NULL মানগুলি প্রথমে প্রদর্শিত হয়।
  • Descending (DESC) : NULL মানগুলি শেষের দিকে প্রদর্শিত হয়।

উদাহরণ:

SELECT * FROM users ORDER BY age ASC;
-- NULL appears first

SELECT * FROM users ORDER BY age DESC;
-- NULL appears last

NULL-এর অবস্থান স্পষ্টভাবে নিয়ন্ত্রণ করা

আপনি ডিফল্ট সাজানোর আচরণ ওভাররাইড করে NULL মানগুলি প্রথমে বা শেষের দিকে প্রদর্শিত করতে বাধ্য করতে পারেন।

  • NULL মানগুলি প্রথমে রাখুন
    SELECT * FROM users ORDER BY age IS NULL DESC, age ASC;
    

এই কুয়েরিতে, যেখানে age NULL, সেই সারিগুলি প্রথমে প্রদর্শিত হয়, তারপরে ঊর্ধ্বক্রমে সাজানো non-NULL সারিগুলি আসে।

  • NULL মানগুলি শেষের দিকে রাখুন
    SELECT * FROM users ORDER BY age IS NULL ASC, age ASC;
    

এখানে, non-NULL মানগুলি প্রথমে প্রদর্শিত হয়, এবং NULL মানগুলি শেষে রাখা হয়।

NULL সহ একাধিক কলাম দ্বারা সাজানো

একাধিক কলাম দ্বারা সাজানোর সময়, আপনি প্রতিটি কলামের জন্য NULL হ্যান্ডলিং নির্দিষ্ট করতে পারেন।

  • একাধিক শর্তের উদাহরণ
    SELECT * FROM users ORDER BY department_id ASC, age IS NULL DESC, age ASC;
    

এই কুয়েরি নিম্নলিখিত ক্রমে ডেটা সাজায়:

  1. department_id ঊর্ধ্বক্রমে
  2. যেখানে age NULL এমন সারি
  3. non-NULL age মানগুলি ঊর্ধ্বক্রমে

সাজানোর পারফরম্যান্স এবং NULL

NULL ধারণকারী কলামে সাজানোর সময়, সূচক ব্যবহৃত হবে কিনা তা কুয়েরি গঠনের উপর নির্ভর করে। যদি সূচক ব্যবহার না হয়, তবে সাজাতে বেশি সময় লাগতে পারে।

  • সূচক ব্যবহারের পরীক্ষা করুন
    EXPLAIN SELECT * FROM users ORDER BY age ASC;
    

সূচক প্রয়োগ হয়েছে কিনা যাচাই করতে EXPLAIN ব্যবহার করুন।

সাজানোর সময় গুরুত্বপূর্ণ নোট

  1. কলামের ডেটা টাইপ বিবেচনা করুন
  • যদি NULL ধারণকারী কলামের ডেটা টাইপ অনুপযুক্ত হয়, তবে অপ্রত্যাশিত ফলাফল হতে পারে। সংখ্যাসূচক এবং স্ট্রিং টাইপের পার্থক্যগুলিতে বিশেষ মনোযোগ দিন।
  1. সাজানোর শর্ত স্পষ্ট করুন
  • কুয়েরি ফলাফল স্পষ্ট করতে, ইচ্ছাকৃতভাবে NULL হ্যান্ডল করার সময় IS NULL বা IS NOT NULL ব্যবহার করুন।
    SELECT * FROM users WHERE age IS NULL ORDER BY age DESC;
    

সারাংশ

ডিফল্টভাবে, NULL ঊর্ধ্বক্রমে প্রথমে এবং নিম্নক্রমে শেষের দিকে প্রদর্শিত হয়। তবে, আপনি কুয়েরি কাস্টমাইজ করে NULL মানের অবস্থান নিয়ন্ত্রণ করতে পারেন। উপযুক্ত শর্ত নির্ধারণ করে, আপনি কাঙ্ক্ষিত সাজানোর ক্রম অর্জন করতে পারেন।

7. NULL হ্যান্ডল করার জন্য উপযোগী ফাংশনসমূহ

MySQL NULL দক্ষতার সঙ্গে হ্যান্ডল করার জন্য বেশ কিছু সুবিধাজনক ফাংশন প্রদান করে। এই ফাংশনগুলি ব্যবহার করে, আপনি আরও পরিষ্কার কুয়েরি লিখতে এবং NULL মান জড়িত থাকলে ডেটা আরও কার্যকরভাবে প্রক্রিয়া করতে পারেন। এই বিভাগে, আমরা সর্বাধিক ব্যবহৃত ফাংশনগুলি এবং সেগুলি কীভাবে ব্যবহার করবেন তা ব্যাখ্যা করছি।

COALESCE ফাংশন

COALESCE নির্দিষ্ট আর্গুমেন্টগুলির মধ্যে প্রথম non-NULL মানটি ফেরত দেয়। আপনি যদি NULL-কে ডিফল্ট মান দিয়ে প্রতিস্থাপন করতে চান, তখন এটি উপযোগী।

  • মৌলিক সিনট্যাক্স
    COALESCE(value1, value2, ..., valueN)
    
  • উদাহরণ
    SELECT COALESCE(age, 0) AS adjusted_age FROM users;
    

এই কুয়েরিতে, যদি age NULL হয়, তবে এটি 0 ফেরত দেয়; অন্যথায়, এটি age এর মান ফেরত দেয়।

  • একাধিক আর্গুমেন্টের উদাহরণ
    SELECT COALESCE(NULL, NULL, 'Default Value', 'Other Value') AS result;
    

ফলাফল হবে “Default Value”।

IFNULL ফাংশন

IFNULL অভিব্যক্তি NULL হলে একটি নির্দিষ্ট মান ফেরত দেয়। এটি COALESCE-এর মতো কিন্তু দুটি আর্গুমেন্টে সীমাবদ্ধ।

  • মৌলিক সিনট্যাক্স
    IFNULL(expression, alternate_value)
    
  • উদাহরণ
    SELECT IFNULL(age, 0) AS adjusted_age FROM users;
    

যদি age NULL হয়, তাহলে এটি 0 ফেরত দেয়।

  • COALESCE থেকে পার্থক্য
  • IFNULL শুধুমাত্র দুটি আর্গুমেন্ট গ্রহণ করে, যেখানে COALESCE একাধিক আর্গুমেন্ট গ্রহণ করতে পারে।

NULL-নিরাপদ সমান অপারেটর (<=>)

<=> অপারেটর NULL মানগুলির নিরাপদ তুলনা করতে দেয়। এই অপারেটর ব্যবহার করে NULL মানগুলিকে সরাসরি তুলনা করা সম্ভব।

  • উদাহরণ
    SELECT * FROM users WHERE age <=> NULL;
    

এই ক্যোয়েরি age NULL হওয়া রেকর্ডগুলি সঠিকভাবে পুনরুদ্ধার করে।

  • সাধারণ সমান অপারেটর (=) থেকে পার্থক্য
  • = অপারেটরের সাথে, NULL = NULL NULL ফেরত দেয়, কিন্তু <=>-এর সাথে, এটি TRUE ফেরত দেয়।

ISNULL ফাংশন

ISNULL একটি মান NULL কিনা তা পরীক্ষা করে। যদিও IS NULL এবং IS NOT NULL সাধারণত যথেষ্ট, ISNULL ফাংশন-ভিত্তিক পরীক্ষার জন্য উপযোগী যখন প্রয়োজন হয়।

  • মৌলিক সিনট্যাক্স
    ISNULL(expression)
    
  • উদাহরণ
    SELECT ISNULL(age) AS is_null FROM users;
    

যদি age NULL হয়, তাহলে এটি 1 ফেরত দেয়; অন্যথায়, এটি 0 ফেরত দেয়।

NULLIF ফাংশন

NULLIF দুটি আর্গুমেন্ট সমান হলে NULL ফেরত দেয়; অন্যথায়, এটি প্রথম আর্গুমেন্ট ফেরত দেয়।

  • মৌলিক সিনট্যাক্স
    NULLIF(expression1, expression2)
    
  • উদাহরণ
    SELECT NULLIF(salary, 0) AS adjusted_salary FROM employees;
    

যদি salary 0 হয়, তাহলে এটি NULL ফেরত দেয়; অন্যথায়, এটি salary-এর মান ফেরত দেয়।

সঠিক NULL ফাংশন নির্বাচনের উপায়

  • ডিফল্ট মান সেট করার জন্য : COALESCE বা IFNULL ব্যবহার করুন
  • NULL-কে নিরাপদে তুলনা করার জন্য : <=> অপারেটর ব্যবহার করুন
  • NULL-এর জন্য স্পষ্টভাবে পরীক্ষা করার জন্য : ISNULL বা IS NULL ব্যবহার করুন
  • নির্দিষ্ট শর্তে NULL ফেরত দেওয়ার জন্য : NULLIF ব্যবহার করুন

সারাংশ

MySQL NULL হ্যান্ডলিংয়ের জন্য একটি সমৃদ্ধ ফাংশন সেট প্রদান করে। উপযুক্ত ফাংশন নির্বাচন করে আপনি সহজ এবং আরও দক্ষ ক্যোয়েরি লিখতে পারেন। এই ফাংশনগুলি ব্যবহার করে আপনার অ্যাপ্লিকেশন NULL মানগুলি কীভাবে হ্যান্ডল করে তা অপ্টিমাইজ করুন।

৮. NULL হ্যান্ডলিংয়ের জন্য সেরা অনুশীলন

NULL ডেটাবেস অপারেশনগুলিতে গুরুত্বপূর্ণ ভূমিকা পালন করে, কিন্তু এর অনন্য বৈশিষ্ট্যের কারণে এটি বিভ্রান্তি এবং সমস্যা সৃষ্টি করতে পারে। NULL-কে সঠিকভাবে হ্যান্ডল করে আপনি ডেটা অখণ্ডতা বজায় রাখতে এবং দক্ষ অপারেশন নিশ্চিত করতে পারেন। এই বিভাগে, আমরা NULL-এর সাথে কাজ করার সেরা অনুশীলন ব্যাখ্যা করি।

ডেটাবেস ডিজাইনে NULL হ্যান্ডলিং

  1. NULL অনুমোদন করা হবে কিনা তা সিদ্ধান্ত নেওয়া
  • NULL “কোনো মান নেই” প্রকাশ করে, কিন্তু প্রত্যেক কলাম NULL অনুমোদন করা উচিত নয়।
  • উদাহরণ: wp:list /wp:list

    • প্রয়োজনীয় ফিল্ডগুলি (যেমন, ইউজারনেম, ইমেইল ঠিকানা) NOT NULL কনস্ট্রেইন্ট থাকা উচিত।
    • যে ফিল্ডগুলি বৈধভাবে কোনো মান নাও থাকতে পারে (যেমন, মধ্যবর্তী স্কোর, ঐচ্ছিক সেটিংস) NULL অনুমোদন করতে পারে।
      CREATE TABLE users (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name VARCHAR(50) NOT NULL,
          email VARCHAR(100) NOT NULL,
          age INT NULL
      );
      
  1. ডিফল্ট মান সেট করা
  • NULL ব্যবহার কমানোর জন্য, যেখানে সম্ভব সেখানে উপযুক্ত ডিফল্ট মান সংজ্ঞায়িত করুন।
    CREATE TABLE orders (
        id INT AUTO_INCREMENT PRIMARY KEY,
        status VARCHAR(20) NOT NULL DEFAULT 'pending'
    );
    

অ্যাপ্লিকেশন লেয়ারে NULL পরিচালনা

  1. ইনপুট ডেটা যাচাই করা
  • যখন ব্যবহারকারীরা ফর্মের মাধ্যমে ডেটা জমা দেন, তখন যাচাই করুন যে প্রয়োজনীয় ফিল্ডগুলি পূর্ণ হয়েছে।
  • ডেটাবেসে অপ্রত্যাশিত NULL মান ঢোকানো রোধ করার জন্য সার্ভার-সাইড যাচাইকরণ যোগ করুন।
  1. NULL হ্যান্ডলিং স্ট্যান্ডার্ডাইজ করা
  • অ্যাপ্লিকেশন কোডবেস জুড়ে NULL-এর সামঞ্জস্যপূর্ণ হ্যান্ডলিং নিশ্চিত করুন।
  • উদাহরণ: NULL-কে ডিফল্ট মানে রূপান্তর করার জন্য একটি হেল্পার ফাংশন প্রদান করুন।
    def handle_null(value, default):
        return value if value is not None else default
    

ক্যোয়েরি লিখার সময় গুরুত্বপূর্ণ বিবেচনা

  1. নিরাপদ NULL তুলনা
  • NULL তুলনা করার সময় সর্বদা IS NULL বা IS NOT NULL ব্যবহার করুন।
    SELECT * FROM users WHERE age IS NULL;
    
  1. জটিল শর্তে NULL হ্যান্ডলিং
  • একাধিক শর্তসহ কুয়েরি লেখার সময়, স্পষ্টভাবে NULL বিবেচনা করুন।
    SELECT * FROM users WHERE age > 20 OR age IS NULL;
    
  1. সমষ্টিগত ফলাফলে NULL বিবেচনা করা
  • সমষ্টি ফাংশন (SUM, AVG ইত্যাদি) NULL মানগুলোকে উপেক্ষা করে। যদি আপনাকে কতগুলো NULL মান আছে তা পরীক্ষা করতে হয়, স্পষ্ট শর্ত যোগ করুন।
    SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_records FROM users;
    

পারফরম্যান্স এবং পাঠযোগ্যতা উন্নত করা

  1. ইন্ডেক্স এবং NULL
  • যদি এমন কলামে ইন্ডেক্স ব্যবহার করেন যেখানে অনেক NULL মান আছে, ইন্ডেক্সের কার্যকারিতা যাচাই করুন।
  • প্রয়োজনে ইন্ডেক্স পুনর্নির্মাণ বা সমন্বয় করুন।
  1. NULL কমানো
  • ডিজাইন পর্যায়ে অপ্রয়োজনীয় NULL ব্যবহার কমানো ডেটাবেসের পাঠযোগ্যতা ও পারফরম্যান্স উন্নত করে।
  • NULL-তে অতিরিক্ত নির্ভর করার বদলে ডিফল্ট মান বা ফ্ল্যাগ ব্যবহার করুন।
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        age INT NOT NULL DEFAULT 0
    );
    

সাধারণ বাস্তব-জগতের সমস্যাবলি এবং সমাধান

  1. সমস্যা: NULL এর কারণে অপ্রত্যাশিত অনুসন্ধান ফলাফল
  • সমাধান: কুয়েরিতে সঠিকভাবে IS NULL অথবা IS NOT NULL ব্যবহার করুন।
    SELECT * FROM users WHERE name = 'Taro' OR name IS NULL;
    
  1. সমস্যা: সমষ্টি ফাংশনে অপ্রত্যাশিত আচরণ
  • সমাধান: NULL বাদ দিতে বা স্পষ্টভাবে হ্যান্ডল করতে শর্ত যোগ করুন।
    SELECT COUNT(age) FROM users WHERE age IS NOT NULL;
    
  1. সমস্যা: NULL এবং ডেটা অখণ্ডতা
  • সমাধান: ডেটাবেস স্তরে NOT NULL বাধ্যতামূলক করুন এবং অ্যাপ্লিকেশন স্তরে ইনপুট যাচাই করুন।

সারাংশ

NULL একটি শক্তিশালী ধারণা, তবে সঠিকভাবে হ্যান্ডল না করলে সমস্যার সৃষ্টি হতে পারে। ডেটাবেস ডিজাইনের সময় স্পষ্ট নীতি নির্ধারণ করে এবং আপনার অ্যাপ্লিকেশনে ধারাবাহিকভাবে হ্যান্ডলিং বজায় রেখে আপনি NULL-সম্পর্কিত সমস্যাগুলি কমাতে পারেন।

9. প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)

MySQL-এ NULL শিখতে গিয়ে, নবীন ও মধ্যম স্তরের ব্যবহারকারীরাও প্রায়ই একই ধরনের প্রশ্ন করে। এই অংশে আমরা NULL সম্পর্কিত প্রায়শই জিজ্ঞাসিত প্রশ্ন এবং তাদের উত্তর সংক্ষেপে উপস্থাপন করছি।

Q1: NULL, একটি খালি স্ট্রিং (“”), এবং শূন্য (0) এর মধ্যে পার্থক্য কী?

  • A1:
  • NULL: কোনো মান নেই (অসংজ্ঞায়িত) নির্দেশ করে।
  • খালি স্ট্রিং (“”): একটি মান আছে, তবে তার বিষয়বস্তু শূন্য।
  • শূন্য (0): একটি মান আছে, এবং তার সংখ্যাগত মান 0।
  • উদাহরণ: INSERT INTO users (name, age) VALUES ('Taro', NULL); -- age is NULL INSERT INTO users (name, age) VALUES ('Hanako', ''); -- age is an empty string INSERT INTO users (name, age) VALUES ('Jiro', 0); -- age is zero

Q2: কেন NULL = NULL সত্য (TRUE) রিটার্ন করে না?

  • A2:
  • SQL স্পেসিফিকেশন অনুযায়ী, NULL একটি “অজানা মান” নির্দেশ করে। অজানা মান তুলনা করলে ফলাফল অনির্ধারিত (NULL) হয়, সত্য (TRUE) বা মিথ্যা (FALSE) নয়।
  • NULL তুলনা করার সময় আপনাকে IS NULL অথবা IS NOT NULL ব্যবহার করতে হবে।
  • উদাহরণ: SELECT NULL = NULL; -- Result: NULL SELECT NULL IS NULL; -- Result: TRUE

Q3: NULL অন্তর্ভুক্ত ডেটা অনুসন্ধান করার সময় কী বিষয়ে সতর্ক থাকা উচিত?

  • A3:
  • যদি আপনি NULL এর সাথে তুলনা অপারেটর (=, <, > ইত্যাদি) ব্যবহার করেন, তবে প্রত্যাশিত ফলাফল পাবেন না। এর পরিবর্তে IS NULL অথবা IS NOT NULL ব্যবহার করুন।
  • উদাহরণ: SELECT * FROM users WHERE age = NULL; -- Incorrect SELECT * FROM users WHERE age IS NULL; -- Correct

Q4: NULL এবং ইন্ডেক্স সম্পর্কে কি কোনো বিষয় বিবেচনা করা দরকার?

  • A4:
  • আপনি NULL ধারণকারী কলামে ইন্ডেক্স তৈরি করতে পারেন, তবে ইন্ডেক্সের কার্যকারিতা কুয়েরি শর্তের উপর নির্ভর করে।
  • বিশেষ করে, জটিল শর্ত (যেমন গণনা অন্তর্ভুক্ত শর্ত) ইন্ডেক্স ব্যবহারে বাধা দিতে পারে।
  • ইন্ডেক্স ব্যবহার পরীক্ষা করার পদ্ধতি: EXPLAIN SELECT * FROM users WHERE age IS NULL;

Q5: COALESCE এবং IFNULL এর মধ্যে পার্থক্য কী?

  • A5:
  • COALESCE : একাধিক আর্গুমেন্ট গ্রহণ করে এবং প্রথম non-NULL মানটি রিটার্ন করে।
  • IFNULL : দুটি আর্গুমেন্ট গ্রহণ করে এবং প্রথমটি NULL হলে দ্বিতীয়টি রিটার্ন করে।
  • উদাহরণ: SELECT COALESCE(NULL, NULL, 'Default Value', 'Other Value'); -- Result: 'Default Value' SELECT IFNULL(NULL, 'Default'); -- Result: 'Default'

Q6: কীভাবে আমি আমার ডাটাবেসকে NULL এড়াতে ডিজাইন করতে পারি?

  • A6:
  • NOT NULL constraints : প্রয়োজনীয় ফিল্ডে সীমাবদ্ধতা যোগ করে NULL প্রতিরোধ করা হয়।
  • Default values : উপযুক্ত স্থানে NULL এর পরিবর্তে ডিফল্ট মান ব্যবহার করুন।
  • উদাহরণ: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, age INT NOT NULL DEFAULT 0 );

Q7: কি সমষ্টি ফাংশনগুলি NULL এর সাথে ভিন্নভাবে আচরণ করে?

  • A7:
  • সমষ্টি ফাংশন (SUM, AVG, COUNT ইত্যাদি) NULL মানগুলোকে উপেক্ষা করে। তবে, যদি আপনি জানতে চান কতগুলো NULL মান আছে, তবে আপনাকে স্পষ্ট শর্ত যোগ করতে হবে।
  • উদাহরণ: SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;

Q8: কি JOIN অপারেশনে NULL সমস্যার সৃষ্টি করতে পারে?

  • A8:
  • যখন NULL ধারণকারী কলামে JOIN অপারেশন করা হয়, তখন NULL মানগুলোকে অমিল হিসেবে বিবেচনা করা হয়। ফলে, আপনি প্রত্যাশিত ফলাফল পেতে নাও পারেন।
  • সমাধান: NULL কে স্পষ্টভাবে বিবেচনা করে এমন কুয়েরি লিখুন অথবা COALESCE ফাংশন ব্যবহার করে NULL কে ডিফল্ট মান দিয়ে প্রতিস্থাপন করুন।
    SELECT *
    FROM table1 t1
    LEFT JOIN table2 t2 ON COALESCE(t1.key, 0) = COALESCE(t2.key, 0);
    

সারাংশ

NULL হল একটি মান যা MySQL ডাটাবেস অপারেশনে বিশেষ হ্যান্ডলিং প্রয়োজন। এই FAQ অংশটি রেফারেন্স হিসেবে ব্যবহার করুন NULL সম্পর্কে আপনার বোঝাপড়া গভীর করতে এবং কীভাবে কার্যকরভাবে হ্যান্ডল করতে হয় শিখতে।

10. উপসংহার

MySQL-এ NULL কীভাবে হ্যান্ডল করতে হয় তা বোঝা ডাটাবেস ডিজাইন ও অপারেশনের একটি অপরিহার্য দক্ষতা। এই প্রবন্ধে, আমরা NULL এর মৌলিক সংজ্ঞা থেকে ম্যানিপুলেশন পদ্ধতি, অনুসন্ধান, সাজানো, ইনডেক্সিং, উপযোগী ফাংশন এবং সেরা অনুশীলন পর্যন্ত সবকিছু কভার করেছি।

মূল বিষয়গুলো

  1. NULL এর মৌলিক বিষয় এবং বৈশিষ্ট্য
  • NULL মানে “কোনো মান নেই” অথবা “অজানা মান”, এবং এটি খালি স্ট্রিং (“”) বা শূন্য (0) থেকে ভিন্ন।
  • NULL জড়িত নিরাপদ তুলনার জন্য IS NULL এবং IS NOT NULL ব্যবহার করুন।
  1. NULL ডেটা নিয়ে কাজ করা এবং অনুসন্ধান
  • আপনি শিখেছেন কীভাবে সঠিকভাবে NULL অন্তর্ভুক্ত ডেটা ইনসার্ট, আপডেট, ডিলিট এবং অনুসন্ধান করতে হয়।
  • IS NULL এবং COALESCE এর মতো সিনট্যাক্স ও ফাংশন ব্যবহার করে নমনীয় ও কার্যকর অপারেশন করা যায়।
  1. NULL এবং পারফরম্যান্স
  • আমরা NULL ধারণকারী কলামের ইনডেক্সের প্রভাব এবং পারফরম্যান্স অপ্টিমাইজ করার ডিজাইন কৌশল নিয়ে আলোচনা করেছি।
  • উপযুক্ত সময়ে ডিফল্ট মান সেট করা অতিরিক্ত NULL ব্যবহার কমাতে সহায়তা করে।
  1. সুবিধাজনক NULL ফাংশনগুলো
  • COALESCE, IFNULL, এবং NULLIF এর মতো ফাংশনগুলো সাধারণ NULL-সংক্রান্ত সমস্যার সমাধানে সহায়তা করে।
  • অনিচ্ছাকৃত আচরণ রোধে নিরাপদ তুলনার জন্য <=> অপারেটর ব্যবহার করুন।
  1. সেরা অনুশীলনগুলো
  • ডাটাবেস ডিজাইনে অপ্রয়োজনীয় NULL ব্যবহার কমিয়ে আনুন এবং ডেটা অখণ্ডতা বজায় রাখতে অ্যাপ্লিকেশন লেয়ারে সঠিক ভ্যালিডেশন প্রয়োগ করুন।
  • SQL কুয়েরিতে NULL হ্যান্ডলিং স্ট্যান্ডার্ডাইজ করা পাঠযোগ্যতা ও রক্ষণাবেক্ষণযোগ্যতা বাড়ায়।

NULL বোঝার সুবিধা

  • দক্ষ ডেটা অপারেশন : NULL সঠিকভাবে হ্যান্ডল করলে অপ্রয়োজনীয় ত্রুটি রোধ হয় এবং দক্ষ কুয়েরি লেখা সম্ভব হয়।
  • ডেটা অখণ্ডতা উন্নত : ডাটাবেস ডিজাইনের সময় NULL ব্যবহারের জন্য স্পষ্ট নীতি নির্ধারণ করলে ডেটা ম্যানেজমেন্ট আরও সামঞ্জস্যপূর্ণ হয়।
  • অ্যাপ্লিকেশন নির্ভরযোগ্যতা বৃদ্ধি : অ্যাপ্লিকেশন লেয়ারে NULL সঠিকভাবে হ্যান্ডল করলে অপ্রত্যাশিত আচরণ ও বাগ রোধ হয়।

পরবর্তী ধাপগুলো

NULL সম্পর্কে আপনার বোঝাপড়া গভীর করতে, নিম্নলিখিত বিষয়গুলো বিবেচনা করুন:

  • আপনার বর্তমান প্রকল্পে কীভাবে NULL ব্যবহার করা হয়েছে তা পর্যালোচনা করুন এবং উন্নতির ক্ষেত্রগুলো চিহ্নিত করুন।
  • বাস্তব ডেটাসেট ব্যবহার করে IS NULL, COALESCE এবং IFNULL এর মতো ফাংশন ও অপারেটর নিয়ে পরীক্ষা করুন।
  • আপনার ওয়ার্কলোডের ভিত্তিতে ইনডেক্স ও পারফরম্যান্স কৌশল আরও টিউন করুন।

এই নিবন্ধটি অধ্যয়ন করে, আপনার এখন MySQL-এ NULL কীভাবে কাজ করে এবং এটি বাস্তবে কীভাবে পরিচালনা করতে হয় সে সম্পর্কে একটি দৃঢ় বোঝাপড়া থাকা উচিত। এই জ্ঞানটি ব্যবহার করে আপনার ডেটাবেস অপারেশন এবং অ্যাপ্লিকেশন ডেভেলপমেন্ট ওয়ার্কফ্লো উন্নত করুন।