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