es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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í?

Tags:  , , , ,

Answer

  1. Avatar for 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 con 777 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.

Comments are closed.