sql >> Base de Datos >  >> RDS >> Mysql

Seleccione la fila principal solo si no tiene hijos

SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL

Puedes hacerlo. la combinación externa debería brindar un poco de rendimiento, pero no mucho.

Los nuevos sistemas de bases de datos probablemente optimizarán su consulta de todos modos para que no haya ninguna diferencia.

¡La forma correcta aquí es el almacenamiento en caché! pruebe el caché de consultas y el almacenamiento en caché a nivel de aplicación si es posible.

por supuesto que necesita índices adecuados.

y por correcto me refiero a ambas tablas y preferiblemente un índice hash ya que tendrá un tiempo de búsqueda estático en comparación con cualquier árbol que tenga logarítmico

Intente poner una explicación antes de la consulta para ver qué es lo que realmente ralentiza esto.

si realmente necesita que esto sea rápido, puede volver a fabricar su estructura de datos.

posiblemente podría crear un disparador para marcar una bandera en la tabla A si hay una entrada correspondiente en la tabla ser. por supuesto, esta redundancia de datos de identificación, pero a veces vale la pena. solo piense en ello como almacenamiento en caché.

un último pensamiento:podría intentar SELECT id FROM A WHERE id NOT IN (SELECT id FROM B) puede ser un poco más rápido porque no es necesaria una unión real, sin embargo, también puede ser más lento porque la búsqueda en el conjunto será un escaneo completo. No estoy muy seguro de cómo se procesará esto, pero puede valer la pena intentarlo.