PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL CROSS JOIN индексиране за производителност

Вашият основен проблем е 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 s):

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);

Това трябва да има значение.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Списъци с ограничения за всички таблици с различни собственици в PostgreSQL

  2. java enum и postgresql enum

  3. Postgresql 9.x:Индекс за оптимизиране на заявки `xpath_exists` (XMLEXISTS)

  4. Грешка в PostgreSQL:Връзката вече съществува

  5. Как да сравним две полета в laravel и postgres