SQL কোয়েরি জেনারেশন
সাধারণ ভাষায় রিকোয়ারমেন্ট বলো, AI তোমার জন্য SQL লিখবে
SQL লেখার ফাঁদগুলো
তিনটা টেবিল JOIN করলে রেজাল্ট রো সংখ্যা ১০ গুণ বেশি আসে — কোনো JOIN ভুল লেখা? আধা ঘণ্টা খুঁজে বের করলাম অনেক-থেকে-অনেক রিলেশন ভুল ছিল।
সাব-কোয়েরি তিনতলা নেস্টেড, নিজে লেখা নিজে বুঝি না। সহকর্মী আসে জিজ্ঞাসা করে "এই SQL কী করে", দুই মিনিট তাকিয়ে থেকে বলি "একটু সময় দাও"।
আরও খারাপ পারফরম্যান্স প্রবলেম: কোয়েরি ৩০ সেকেন্ড লেগে যায়, EXPLAIN দেখে অর্ধ ঘণ্টা খুঁজেও কী ভুল এমন বুঝতে পারি না। ইনডেক্স যোগ করলে আরও স্লো হয়ে গেল — কী দোষ আছে?
সাধারণ ভাষায় বলো "প্রতিটি ইউজারের গত ৩০ দিনের খরচ বের করো, সবচেয়ে বেশি থেকে কম অর্ডার করে", 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 টেবিল প্রায় ५ মিলিয়ন রো।
পরামর্শিত ইনডেক্সও দিয়ে দাও।
এই SQL ३० সেকেন্ড লেগেছে, অপটিমাইজ করতে সাহায্য করো:
[এখানে স্লো SQL পেস্ট করো]
EXPLAIN ফলাফল:
[এখানে EXPLAIN আউটপুট পেস্ট করো]
এনালাইজ করো:
००१. বটলনেক কোথায় (ফুল টেবিল স্ক্যান? টেম্প টেবিল? ফাইল সর্ট?)
००२. কী ইনডেক্স দিতে হবে (CREATE INDEX স্টেটমেন্ট দাও)
००३. SQL কীভাবে রিরাইট করলে দ্রুত হবে (অন্য কিন্তু আরও দক্ষ লেখা আছে কি?)
००४. অপটিমাইজেশনের পর এক্সিকিউশন টাইম কত হবে বলে দাও
ডেটাবেস: PostgreSQL १५, টেবিল ডেটা প্রায় २० মিলিয়ন রো।
ডেটাবেসে তিনটা টেবিল আছে:
- users(id, name, registered_at)
- orders(id, user_id, product_id, amount, created_at, status)
- products(id, name, category, brand)
আমাকে একটা কোয়েরি লিখতে সাহায্য করো:
००१. প্রতিটি ইউজারের মোট ব্যয় (শুধু সম্পূর্ণ অর্ডার)
००२. প্রতিটি ইউজার সবচেয়ে বেশি কিনেছে কোন ক্যাটেগরি (পাঁচালিদা হলে প্রথমটা দেবে)
००३. প্রতিটি ইউজারের প্রথম এবং শেষ কেনাকাটার সময়
००४. গত এক বছরে কেনাকাটা করেছে সেই ইউজাররা দেখাও
००५. মোট ব্যয় অনুযায়ী সবচেয়ে বেশি থেকে কম, শীর্ষ १०० দেখাও
ডেটাবেস: MySQL ८.०। CTE ব্যবহার করে SQL রিডেবল করো।
ডেটাবেস কানেকশন কনফিগ
OpenClaw কে সরাসরি ডেটাবেসে কানেক্ট করে ডেটা এক্সেস করার সেটআপ (অপশনাল, না করলেও SQL তৈরি করতে পারে)।
# ডেটাবেস কানেকশন (অপশনাল, সেট করলে 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 লিখতে পারবে
# শুধু ফলাফল ভেরিফাই করে দেখাতে পারবে না
SQL লেখা: OpenClaw বনাম ChatGPT
দুটোই SQL তৈরি করতে পারে, কিন্তু বিস্তারিত অনেক আলাদা।
- তোমার ডেটাবেস স্কিমা পড়তে পারে, তৈরি করা SQL এক্সাক্টলি টেবিল স্ট্রাকচারের সাথে ম্যাচ করে
- ডেটাবেসে সরাসরি কানেক্ট করে কোয়েরি ফলাফল ভেরিফাই করতে পারে (শুধুমাত্র-পড়া অ্যাকাউন্ট সেটআপ করলে)
- কনটেক্সট বোঝে: আগের কোয়েরি, টেবিল রিলেশনশিপ সব মনে রাখে, ফলো-আপে আবার না বলে দিলেও বোঝে
- লোকাল এক্সিকিউট, তোমার টেবিল স্ট্রাকচার এবং বিজনেস লজিক লিক হয় না
- শুধু তোমার ডিসক্রিপশন অনুযায়ী SQL তৈরি করতে পারে, অনেক গেসওয়ার্ক
- SQL সরাসরি ভেরিফাই করতে পারে না, সিনট্যাক্স ঠিক কিনা নিজে ট্রাই-এন্ড-এরর করে দেখতে হয়
- কনটেক্সট উইন্ডো সীমিত, জটিল বিজনেস লজিক আলাপে আলাপে ভুলে যায়
- তৈরি করা SQL কখনো সিনট্যাক্স সঠিক কিন্তু লজিক ভুল, খুবই কঠিন দেবুগ করা