Mysql, consulta registro sin integridad referencial
Rodrigo Fuentealba
the.code.keeper en gmail.com
Mie Oct 1 20:05:00 CLT 2008
El día 1 de octubre de 2008 19:51, Lorenzo Ponce <lekronne en yahoo.com> escribió:
>
>>http://dev.mysql.com/doc/refman/5.0/en/rewriting-subqueries.html
>
>>Haz un query rewrite como el que sigue:
>
>>SELECT tabla1.*
>> FROM tabla1 LEFT JOIN tabla2 ON tabla1.id=tabla2.id
>> WHERE tabla2.id IS NULL;
>
>>Con eso deberías tener un improvement.
>
> De todas formas es lento, no sé si existe una forma de hacer lo que
> necesito con consultas sql dado lo que ya está hecho por un tercero.
A eso me refería con que el optimizador de consultas en MySQL era malo. See?
> Si existe alguna otra técnica, sería interesante.
Lo encuentro difícil. ¿Tal vez si haces un EXPLAIN y le pones INDEX
para que por lo menos se ahorre el tiempo de buscar?
http://dev.mysql.com/doc/refman/5.0/en/explain.html
Por lo menos a mí el poner índices en PostgreSQL me resulta muy bien
cada vez que tengo una query lenta. No sé si en MySQL se pueda, pero
la estrategia debería ser más o menos la misma:
http://dev.mysql.com/doc/refman/5.0/en/create-index.html
Creo que un BTREE sería lo único que puedes hacer (los RTREE son para
indexes espaciales).
> He pensado en escribir un caracter especial en un campo por cada uno de los
> registros de la tabla 2, luego en el select de la tabla 1 usar una comparación,
> como por ejemplo, campo NOT LIKE "%-id-%", evidéntemente no es una solución "elegante".
Feo.
> Bueno, sinó tocará rediseñar.
Try indexes.
--
Rodrigo Fuentealba
Más información sobre la lista de distribución Linux