আমি শিরোনামে ভুল প্রশ্ন জিজ্ঞাসা করা হতে পারে। এখানে তথ্যগুলি:
আমাদের গ্রাহক পরিষেবা লোকেরা আমাদের জ্যাঙ্গো-ভিত্তিক সাইটের প্রশাসনিক ইন্টারফেসে গ্রাহক দেখার জন্য ধীর সাড়া দেওয়ার সময় সম্পর্কে অভিযোগ করে আসছে।
আমরা পোস্টগ্রিস 8.4.6 ব্যবহার করছি। আমি ধীর অনুসন্ধানগুলি লগ করতে শুরু করেছি এবং এই অপরাধীকে আবিষ্কার করেছি:
SELECT COUNT(*) FROM "auth_user" WHERE UPPER("auth_user"."email"::text) LIKE UPPER(E'%deyk%')
এই কোয়েরিটি চালাতে 32 সেকেন্ডের বেশি সময় নিচ্ছে। এখানে জিজ্ঞাসা পরিকল্পনা সরবরাহ করেছেন:
QUERY PLAN
Aggregate (cost=205171.71..205171.72 rows=1 width=0)
-> Seq Scan on auth_user (cost=0.00..205166.46 rows=2096 width=0)
Filter: (upper((email)::text) ~~ '%DEYK%'::text)
যেহেতু এটি জ্যাঙ্গো ওআরএম দ্বারা জ্যাঙ্গো অ্যাডমিন অ্যাপ্লিকেশন দ্বারা উত্পন্ন জ্যাঙ্গো ক্যোয়ারীসেট থেকে উত্পন্ন একটি ক্যোয়ারী, কারণ নিজেই ক্যোয়ারীর উপর আমার কোনও নিয়ন্ত্রণ নেই। একটি সূচি যৌক্তিক সমাধান মত মনে হচ্ছে। আমি এটির গতি বাড়ানোর জন্য একটি সূচক তৈরি করার চেষ্টা করেছি, তবে এটি কোনও তফাত্ করেছে না:
CREATE INDEX auth_user_email_upper ON auth_user USING btree (upper(email::text))
আমি কি ভুল করছি? আমি এই ক্যোয়ারীটি কীভাবে দ্রুত করব?