SQL কোয়েরি জেনারেশন

সাধারণ ভাষায় রিকোয়ারমেন্ট বলো, AI তোমার জন্য SQL লিখবে

SQL লেখার ফাঁদগুলো

JOIN ভুল লেখা, সাব-কোয়েরি এত বেশি যে মাথা ঘুরে যায়

তিনটা টেবিল JOIN করলে রেজাল্ট রো সংখ্যা ১০ গুণ বেশি আসে — কোনো JOIN ভুল লেখা? আধা ঘণ্টা খুঁজে বের করলাম অনেক-থেকে-অনেক রিলেশন ভুল ছিল।

সাব-কোয়েরি তিনতলা নেস্টেড, নিজে লেখা নিজে বুঝি না। সহকর্মী আসে জিজ্ঞাসা করে "এই SQL কী করে", দুই মিনিট তাকিয়ে থেকে বলি "একটু সময় দাও"।

আরও খারাপ পারফরম্যান্স প্রবলেম: কোয়েরি ৩০ সেকেন্ড লেগে যায়, EXPLAIN দেখে অর্ধ ঘণ্টা খুঁজেও কী ভুল এমন বুঝতে পারি না। ইনডেক্স যোগ করলে আরও স্লো হয়ে গেল — কী দোষ আছে?

OpenClaw: বিজনেস লজিক বুঝে নির্ভরযোগ্য SQL লেখে

সাধারণ ভাষায় বলো "প্রতিটি ইউজারের গত ৩০ দিনের খরচ বের করো, সবচেয়ে বেশি থেকে কম অর্ডার করে", OpenClaw সরাসরি প্রফেশনাল SQL তৈরি করে।

শুধু ট্রান্সলেশন না, টেবিল রিলেশনশিপ, ডেটা স্কেল, ইনডেক্স পরিস্থিতি সব ভেবে SQL তৈরি করে যা সঠিক এবং পারফরম্যান্সও ভালো।

স্লো কোয়েরি পেলে SQL এবং EXPLAIN ফলাফল দুটোই ফেলে দাও, বটলনেক কোথায়, কী ইনডেক্স যোগ করবে, কীভাবে রিরাইট করলে দ্রুত হবে বলে দেবে।যেন পাশে একটা DBA বসে আছে যে যেকোনো প্রশ্নের উত্তর দেয়।

३ টা SQL প্রম্পট, দৈনন্দিন ९०% ক্ষেত্র কভার করে

দৈনন্দিন ডেটা এক্সট্র্যাক্ট থেকে পারফরম্যান্স অপটিমাইজেশন, প্রয়োজন অনুযায়ী ব্যবহার করো।

দৈনন্দিন ডেটা: গত ३० দিনে নতুন ইউজার চ্যানেল ভাগ করে গোল্ডেন ইন্সট্রাকশন
ডেটাবেসে এই টেবিলগুলো আছে:
- users(id, name, email, channel, created_at, status)
- user_profiles(user_id, age, gender, city)

আমাকে SQL লিখতে সাহায্য করো:
१. গত ३० দিনে প্রতিদিন নতুন ইউজার সংখ্যা বের করো
००. রেজিস্ট্রেশন চ্যানেল (channel) দ্বারা গ্রুপ করো
०३. প্রতিটি চ্যানেলের পরের দিন ধারণ হার গণনা করো
०४. ফলাফল তারিখ অনুসারে সর্বশেষ প্রথম অর্ডার করো

ডেটাবেস MySQL ८.०, users টেবিল প্রায় ५ মিলিয়ন রো।
পরামর্শিত ইনডেক্সও দিয়ে দাও।
দৈনন্দিন ডেটা এক্সট্র্যাকশন সবচেয়ে সাধারণ প্যাটার্ন। AI কে নিজের ডেটাবেস টাইপ এবং ডেটা স্কেল বলতে ভুলবে না, বিভিন্ন ডিবি অলাদা সিনট্যাক্স আছে (যেমন ডেট ফাংশন), ডেটা স্কেল কোয়েরি স্ট্র্যাটেজি বদলে দেয়।
স্লো কোয়েরি অপটিমাইজ: ३० সেকেন্ডের SQL কীভাবে সারাবো অ্যাডভান্সড টেকনিক
এই SQL ३० সেকেন্ড লেগেছে, অপটিমাইজ করতে সাহায্য করো:

[এখানে স্লো SQL পেস্ট করো]

EXPLAIN ফলাফল:
[এখানে EXPLAIN আউটপুট পেস্ট করো]

এনালাইজ করো:
००१. বটলনেক কোথায় (ফুল টেবিল স্ক্যান? টেম্প টেবিল? ফাইল সর্ট?)
००२. কী ইনডেক্স দিতে হবে (CREATE INDEX স্টেটমেন্ট দাও)
००३. SQL কীভাবে রিরাইট করলে দ্রুত হবে (অন্য কিন্তু আরও দক্ষ লেখা আছে কি?)
००४. অপটিমাইজেশনের পর এক্সিকিউশন টাইম কত হবে বলে দাও

ডেটাবেস: PostgreSQL १५, টেবিল ডেটা প্রায় २० মিলিয়ন রো।
স্লো কোয়েরি অপটিমাইজ করার সময় অবশ্যই EXPLAIN ফলাফল দেবে, শুধু SQL দেখে সত্যিকারের বটলনেক ধরা মুশকিল। ডেটা স্কেলও বলতে ভুলবে না — १०० রো এবং २० মিলিয়ন রো এর অপটিমাইজেশন স্ট্র্যাটেজি সম্পূর্ণ অলাদা।
জটিল বিজনেস কোয়েরি: ইউজার ব্যয় এনালিসিস গোল্ডেন ইন্সট্রাকশন
ডেটাবেসে তিনটা টেবিল আছে:
- users(id, name, registered_at)
- orders(id, user_id, product_id, amount, created_at, status)
- products(id, name, category, brand)

আমাকে একটা কোয়েরি লিখতে সাহায্য করো:
००१. প্রতিটি ইউজারের মোট ব্যয় (শুধু সম্পূর্ণ অর্ডার)
००२. প্রতিটি ইউজার সবচেয়ে বেশি কিনেছে কোন ক্যাটেগরি (পাঁচালিদা হলে প্রথমটা দেবে)
००३. প্রতিটি ইউজারের প্রথম এবং শেষ কেনাকাটার সময়
००४. গত এক বছরে কেনাকাটা করেছে সেই ইউজাররা দেখাও
००५. মোট ব্যয় অনুযায়ী সবচেয়ে বেশি থেকে কম, শীর্ষ १०० দেখাও

ডেটাবেস: MySQL ८.०। CTE ব্যবহার করে SQL রিডেবল করো।
মাল্টি-টেবিল জয়েন + এগ্রিগেট + র‍্যাঙ্কিং, এই ধরনের কোয়েরি হাতে লিখলে সহজেই ভুল হয়। AI দিয়ে CTE লিখাবে, রিডেবিলিটি অনেক ভালো হয়, পরে রিকোয়ারমেন্ট পরিবর্তন করাও সহজ।

ডেটাবেস কানেকশন কনফিগ

OpenClaw কে সরাসরি ডেটাবেসে কানেক্ট করে ডেটা এক্সেস করার সেটআপ (অপশনাল, না করলেও SQL তৈরি করতে পারে)।

ডেটাবেস কানেকশন কনফিগ (.openclaw.yml)
# ডেটাবেস কানেকশন (অপশনাল, সেট করলে AI সরাসরি ডেটা এক্সেস করে ফলাফল ভেরিফাই করতে পারবে)
database:
  type: mysql                 # mysql / postgresql / sqlite
  host: localhost
  port: 3306
  database: my_app
  user: readonly_user         # অত্যন্ত পরামর্শিত শুধুমাত্র-পড়া অ্যাকাউন্ট ব্যবহার করো!
  password_env: DB_PASSWORD   # এনভায়রনমেন্ট ভ্যারিয়েবল থেকে পাসওয়ার্ড, প্লেইনটেক্সট লিখবে না

  # নিরাপত্তা সীমাবদ্ধতা
  read_only: true             # শুধুমাত্র SELECT, ডেটা পরিবর্তন নিষেধ
  max_rows: 10000             # এক বার কোয়েরি সর্বোচ্চ রো
  timeout: 30                 # কোয়েরি টাইমআউট (সেকেন্ড)

# ডেটাবেস কানেক্ট না করলেও ঠিক আছে, AI তোমার টেবিল স্ট্রাকচার অনুযায়ী SQL লিখতে পারবে
# শুধু ফলাফল ভেরিফাই করে দেখাতে পারবে না
⚠️ প্রোডাকশন ডেটাবেস কানেক্ট করার সময় অবশ্যই শুধুমাত্র-পড়া অ্যাকাউন্ট ব্যবহার করো। OpenClaw এ নিরাপত্তা আছে থাকলেও, সেফটি একাধিক লেয়ার ভালো। শুধুমাত্র-পড়া রেপ্লিকার সাথে কানেক্ট করো, মেইন ডেটাবেসের সাথে না।

SQL লেখা: OpenClaw বনাম ChatGPT

দুটোই SQL তৈরি করতে পারে, কিন্তু বিস্তারিত অনেক আলাদা।

OpenClaw
  • তোমার ডেটাবেস স্কিমা পড়তে পারে, তৈরি করা SQL এক্সাক্টলি টেবিল স্ট্রাকচারের সাথে ম্যাচ করে
  • ডেটাবেসে সরাসরি কানেক্ট করে কোয়েরি ফলাফল ভেরিফাই করতে পারে (শুধুমাত্র-পড়া অ্যাকাউন্ট সেটআপ করলে)
  • কনটেক্সট বোঝে: আগের কোয়েরি, টেবিল রিলেশনশিপ সব মনে রাখে, ফলো-আপে আবার না বলে দিলেও বোঝে
  • লোকাল এক্সিকিউট, তোমার টেবিল স্ট্রাকচার এবং বিজনেস লজিক লিক হয় না
VS
ChatGPT
  • শুধু তোমার ডিসক্রিপশন অনুযায়ী SQL তৈরি করতে পারে, অনেক গেসওয়ার্ক
  • SQL সরাসরি ভেরিফাই করতে পারে না, সিনট্যাক্স ঠিক কিনা নিজে ট্রাই-এন্ড-এরর করে দেখতে হয়
  • কনটেক্সট উইন্ডো সীমিত, জটিল বিজনেস লজিক আলাপে আলাপে ভুলে যায়
  • তৈরি করা SQL কখনো সিনট্যাক্স সঠিক কিন্তু লজিক ভুল, খুবই কঠিন দেবুগ করা

বাস্তব ঘটনা

ডেটা অ্যানালিস্ট: বস হঠাৎ নতুন রিকোয়ারমেন্ট যোগ করেছে
বিকেল তিনটায় বস মেসেজ করে: "গত তিন মাস বিভিন্ন চ্যানেলের ROI চেক করে, সাপ্তাহিক, পাঁচটায় দেবে।" এই টেবিলগুলো কীভাবে রিলেটেড সেটা খুব পরিষ্কার নই, SQL না লিখে নিশ্চিত না।
OpenClaw সলিউশন
টেবিল স্ট্রাকচার বলে দাও OpenClaw কে, সাধারণ ভাষায় রিকোয়ারমেন্ট, দুই মিনিটে SQL পেয়ে যাবে। ডেটাবেসে রান করে দেখো, ফলাফল ঠিক আছে কিনা চেক করো, AI কে SQL লজিক ব্যাখ্যা করতে বলো, নিজেও শিখলাম। চারটায় সাবমিট করেছি, আরও আগে।
নিজে লিখি
ডকুমেন্টেশন দেখে টেবিল স্ট্রাকচার বুঝি, SQL লিখি, JOIN ভুল লিখে ফলাফল ভুল, এক ঘণ্টা খুঁজে বের করি। ঠিক করেছি, এবার ডেট ফাংশন ভুল লিখা আবিষ্কার করি। পাঁচটায় দিতে পারব না, বস কে বলি "আরও পাঁচ মিনিট দাও"।

SQL তৈরি ছোট টিপস

💡 AI কে SQL তৈরি করতে বলার সময় অবশ্যই বলতে হবে: ডেটাবেস টাইপ (MySQL / PostgreSQL / SQLite), টেবিল ডেটা প্রায় কত, কী ইনডেক্স আছে। এই তিনটা তথ্য SQL কোয়ালিটি সরাসরি প্রভাবিত করে।
🎯 জটিল কোয়েরিতে AI কে CTE (WITH ক্লজ) দিয়ে লিখতে বলো, নেস্টেড সাব-কোয়েরি না। CTE রিডেবিলিটি অনেক বেশি, পরে রিকোয়ারমেন্ট পরিবর্তন করার সময় ভেতর-বাহির এক তৈরি করে বের করার প্রয়োজন নেই।
🔒 ভালো অভ্যাস গড়ো: AI যখন SQL তৈরি করে, প্রথমে LIMIT १०० দিয়ে রান করে ফলাফল ঠিক আছে কিনা দেখো, সরাসরি বড় টেবিলে ফুল কোয়েরি চালাবে না। বিশেষ করে যখন মাল্টি-টেবিল জয়েন করছো, কার্টেশিয়ান প্রোডাক্ট হলে ডেটাবেস সম্পূর্ণ ক্র্যাশ করতে পারে।
এই কেসটা কাজে লেগেছে?