आपकी मुख्य समस्या है OR
— जब तक आपके पास OR
. है, तब तक आपको अच्छा प्रदर्शन नहीं मिल सकता है अपने WHERE
. में इस तरह खंड।
क्वेरी को इस प्रकार फिर से लिखें:
SELECT * FROM main_transaction t
JOIN main_profile p ON t.profile_id = p.id
JOIN main_customer c ON p.user_id = c.id
WHERE upper(t.request_no) LIKE upper(concat('%','0-90-6 12 ','%'))
UNION
SELECT * FROM main_transaction t
JOIN main_profile p ON t.profile_id = p.id
JOIN main_customer c ON p.user_id = c.id
WHERE upper(c.phone) LIKE upper(concat('%','0-90-6 12','%'));
फिर सुनिश्चित करें कि आपके पास निम्नलिखित इंडेक्स हैं (id
. पर इंडेक्स के अलावा) रों):
CREATE INDEX ON main_transaction (profile_id);
CREATE INDEX ON main_transaction USING gin (upper(request_no) gin_trgm_ops);
CREATE INDEX ON main_profile (user_id);
CREATE INDEX ON main_customer USING gin (upper(phone) gin_trgm_ops);
इससे फर्क पड़ना चाहिए।