tengo un problema con esta consulta:Optimizar consulta de MySQL usando índices
SELECT DISTINCT s.city, pc.start, pc.end
FROM postal_codes pc LEFT JOIN suspects s ON (s.postalcode BETWEEN pc.start AND pc.end)
WHERE pc.user_id = "username"
ORDER BY pc.start
mesa sospechoso tiene alrededor de 340 000 entradas, hay un índice en postalcode, tengo varios usuarios, pero esta consulta individual tiene aproximadamente 0,5 s, cuando ejecuto este SQL con Explain, obtengo algo como esto: http://my.jetscreenshot.com/7536/20111225-myhj-41kb.jpg - ¿significa esto que la consulta no utiliza el índice? El índice es un BTREE, así que creo que esto debería correr un poco más rápido.
¿Me pueden ayudar con esto? Si hay alguna otra información necesaria, solo avíseme.
Editar: Tengo índices en los códigos sospechosos.postalcode, postal_codes.start, postal_codes.end, postal_codes.user_id.
Básicamente lo que estoy tratando de lograr: Tengo una tabla donde cada ID de usuario tiene varios rangos CódPostal asignado, por lo que parece:
user_id | start | end
de lo que tengo una tabla de sospechosos que cada sospechoso tiene una dirección (que contiene un código postal), por lo que en esta consulta estoy tratando de obtener el rango de código postal - inicio y final y también el nombre de la ciudad en este rango.
Espero que esto ayude.
Hola Joseph, ¿puedes editar la pregunta y enumerar el/los índice/s original/es en cada tabla, incluyendo qué columna (s) están en cada uno y en qué orden? – TetonSig
Además, ¿puede aclarar qué se supone que debe devolver la consulta? Me parece que para un usuario dado, le gustaría mostrar la ciudad relacionada con cualquier código postal sospechoso que se encuentre dentro de un rango asignado a ese usuario. Y también le gustaría ver en qué rango cae la ciudad. Lo pregunto porque saber lo que quiere nos permitirá saber qué opciones tenemos para estructurar la consulta. – TetonSig
Hola, he editado la publicación, espero que haya información útil ahora. – Joseph