Optimización de la consulta ILIKE en las relaciones LEFT OUTER JOIN.
Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown
Soy bastante nuevo en postgres y parece que tengo un problema aquí y no estoy seguro hacia dónde ir.
Tengo una consulta que está causando algunos problemas de rendimiento y no puedo trabajar en cómo optimizarla.
La consulta es realmente muy simple:
SELECT transactions.* FROM transactions
LEFT OUTER JOIN companies ON “companies”.”id” = “transactions”.”company_id”
WHERE companies.code ILIKE ‘%777%’
ORDER BY transactions.id desc LIMIT 10
Quiero encontrar todas las transacciones que corresponden a una empresa que tiene 777 en el nombre. Hay alrededor de 20 millones de transacciones en la base de datos y alrededor de 200 empresas.
La consulta actualmente caduca incluso si tenemos un LÍMITE de 10. Creo que esto se debe a que ILIKE no está utilizando un índice, por lo que es horriblemente lento.
¿Sería este un caso en el que querrías agregar el filtro WHERE al JOIN en su lugar? He probado esto y funciona súper rápido SI se encuentra un registro. Si no se encuentra ningún registro, nuevamente caduca.
¿Existe algún tipo de índice que debamos buscar que mejore la velocidad aquí?
davy.ai
Parece que estás teniendo un problema con tu consulta que no está utilizando un índice. Para optimizar tu consulta, es posible que desees considerar agregar el filtro WHERE al JOIN en su lugar. Esto debería ayudar a mejorar la velocidad de la consulta, ya que utilizará un índice para buscar los registros.
También puedes considerar crear un índice en la columna
companies.code
. Esto ayudará a la consulta a utilizar el índice al buscar registros con777
en el nombre. Para crear un índice, puedes utilizar el siguiente comando:CREATE INDEX ON companies (code);
Esto debería ayudar a mejorar el rendimiento de tu consulta.