Pregunta

Estamos utilizando PostgreSQL v8.2.3.

Hay tablas involucradas:. EMPLEADOS y Emaillist

Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)

2 tablas se unen de tal manera que si cualquiera EMPLOYEE.EMAIL1 o EMPLOYEE.EMAIL2 no tienen una entrada coincidente, se devolverá esas filas.

SELECT employee.email1, employee.email2,
        e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched
   FROM employee
   LEFT JOIN emaillist e1 ON e1.email = employee.email1
   LEFT JOIN emaillist e2 ON e2.email = employee.email2
 WHERE e1.email IS NULL OR e2.email IS NULL

EMAIL columna que es varchar (256) de mesa EMAILLIST está indexado. Ahora, el tiempo de respuesta es de 14 segundos.

estadísticas de conteo de mesa:. En la actualidad, empleado ha conseguido 165,018 registros y Emaillist ha conseguido 1,810,228 registros, y se espera que ambas tablas para crecer en el futuro

  1. ¿Es una buena idea / enfoque de índice de una columna VARCHAR? Esta pregunta huelga inmediatamente en mi mente debido a la razón que nosotros no hemos indexado una columna VARCHAR antes en nuestra aplicación. consejos expertos / sugerencia sobre esta son muy apreciados.
  2. Con esta consulta y el índice actual, el tiempo de respuesta de 14 segundos es razonable o hay alguna posibilidad de ajuste adicional? ¿Cuáles son otras de usuario en tiempo real de la experiencia / opinión basada en este tipo de tamaño de la tabla y tiempo de respuesta?

Nota: Mi caso real requerimiento / uso se explica en detalle aquí .

¿Fue útil?

Solución

No hay nada malo con la indexación de una columna varchar si vas a estar haciendo consultas basadas en él. Sin embargo tenga en cuenta que hay unos límites a algunos índices y lo mucho que puede indexar en un solo campo. Ejemplo que no pueden indexar una columna que puede contener una cantidad ilimitada de texto. Sin embargo, usted debe ser capaz de hacer un índice en varchar (256) sin problema. Pruébalo, y analizar las mejoras en el rendimiento de las consultas para ver si ayuda.

Otros consejos

No hay ningún problema indexar una columna varchar como tal

¿Dónde se puede convertir en un problema es cuando se tiene la columna varchar como FK en una tabla mil millones fila. A continuación, tendría una clave sustituta para el PK y FK, pero todavía se necesitaría una restricción / índice único en la tecla varchar natural.

Sus mesas son bastante pequeñas y el rendimiento podría estar relacionado con la cláusula OR. Por desgracia, el mismo problema se aplica sin importar cómo se estructura la consulta (y no estoy lo suficientemente familiarizado con PostgresSQL ofrecer mucho lo siento)

Trate de deshacerse de la "O e2.email ES NULO" parte de su consulta y ver lo rápido que se ejecuta. Si se ejecuta más rápido que puede ser capaz de correr más rápido con una "unión de todo"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top