> For the complete documentation index, see [llms.txt](https://sql.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sql.howtocode.dev/database-optimization/query-optimization.md).

# কুয়েরী অপ্টিমাইজেশান

**“কুয়েরী অপটিমাইজেশন”** হচ্ছে ডাটাবেজ ম্যানেজমেন্ট সিস্টেম এর একটা ফাংশন। পসিবল কুয়েরী প্লান থেকে কিভাবে এফিশিয়েন্ট কুয়েরী লেখা এবং এক্সিকিউট করা যায় তা ঠিক করে কুয়েরী অপটিমাইজার।

## যেভাবে কুয়েরী অপটিমাইজেশন করতে হয়

* Join ordering
* Query planning for nested SQL queries
* Cost estimation

**Join ordering**

কুয়েরী প্লানের পারফরমেন্স মুলত কোন অর্ডারে টেবিল জয়েন করা হয়েছে তার উপর নির্ভর করে। মনে করুন তিনটি টেবিল A,B এবং C এদের রো আছে যথাক্রমে ১০,১০০,২০০। কোন কুয়েরী প্লানে যদি প্রথমে B ও C জয়েন করানো হয় এবং শেষে তাদের সাথে A জয়েন করানো হয় তাহলে কুয়েরী এক্সিকিউট করতে সময় ও মেমোরি বেশি লাগবে। কিন্তু যদি প্রথমে A ও B এবং শেষে C জয়েন করানো হয় তাহলে সময় এবং মেমোরি কম লাগবে। কারন A তে রো এর সংখ্যা কম।

**Cost estimation**

**1)**

```
SELECT * FROM `users`
```

সাধারণত \* দ্বারা সব কলাম বা ফিল্ড এর ভ্যালু এর পাওয়া যায়। কিনতু যদি আমাদের শুধু মাত্র কয়েকটি কলাম বা ফিল্ড এর দরকার পড়ে , তাহলে আমরা শুধুমাত্র ওই কয়েকটি কলাম বা ফিল্ড এর নাম উল্লেখ করে দিতে পারি।

```
SELECT email,password FROM `users`
```

**2)**

```
SELECT * FROM `users` WHERE name='niloy'
```

যখন আপনি একটি রো এক্সপেক্ট করছেন তখন LIMIT 1 ব্যবহার করাই ভাল

```
SELECT * FROM `users` WHERE name='niloy' LIMIT 1
```

**3)** ইনডেক্সিং । ইনডেক্সিং ব্যবহার করে আপনার কুয়েরী টাইম অনেক কমিয়ে নিয়ে আসতে পারেন । তবে আপনি সেইসব সব ফিল্ডই ইনডেক্সিং করবেন , যে সব ফিল্ড আপনি WHERE কনন্ডিশন এ ব্যবহার করছেন।
