vistas una tablas rendimiento recomendaciones queries porque optimizador lenta las grandes daƱan cuello consulta como botella agilizar mysql join duplicates unique

una - MySQL selecciona filas que no tienen columna correspondiente en otra tabla



view lenta mysql (3)

Normalmente, utilizará NOT EXISTS para este tipo de consulta

SELECT p.Name FROM pooltest p WHERE NOT EXISTS (SELECT s.Name FROM senttest s WHERE s.Name = p.Name)

Una alternativa sería usar un LEFT OUTER JOIN y verificar NULL

SELECT p.Name FROM pooltest p LEFT OUTER JOIN senttest s ON s.Name = p.Name WHERE s.Name IS NULL

Tenga en cuenta que la sintaxis de unión implícita que está utilizando se considera obsoleta y debe reemplazarse con una unión explícita.

Parece que no puedo entender esto hasta ahora. Intento unir dos tablas y solo seleccionar las filas de la tabla A que no tienen una columna correspondiente en la tabla B. Por ejemplo, supongamos que tenemos una tabla de usuarios y una tabla enviada.

users tabla de users tiene las siguientes columnas: id, username
sent tabla sent tiene las siguientes columnas: id, username

Quiero seleccionar todas las filas de los users donde el username no existe en la tabla sent . Entonces, si tom está en users y en sent , no será seleccionado. Si está en users pero no en sent , será seleccionado. Intenté esto pero no funcionó en absoluto:

SELECT pooltest.name,senttest.sentname FROM pooltest,senttest WHERE pooltest.name != senttest.sentname


Prueba este SQL:

SELECT users.username FROM users LEFT JOIN sent ON sent.username = users.username WHERE sent.username IS NULL;

La mejor manera en mi opinión sería:

SELECT users.username FROM users LEFT JOIN sent ON sent.id = users.id WHERE sent.id IS NULL;

Como ambos campos de id, se indexarían (clave principal, habría pensado), esta consulta estaría mejor optimizada que la primera que sugerí.

Sin embargo, es posible que mi primera sugerencia sea mejor para usted, depende de cuáles sean sus requisitos para su aplicación.


Puede ser que este te pueda ayudar ...

También tuve el mismo problema, pero solucioné usando esta consulta

INSERT INTO tbl1 (id,name) SELECT id,name from tbl2 where (name) not in(select name from tbl1);

espero que este solucione tu problema