J'ai besoin d'auditer certaines données, mais je suis en train de tomber sur un roadblock avec une requête qui ne retourne pas. Que puis-je faire différemment ici car je ne comprends vraiment pas ce que ces requêtes retournent (exécutées à partir de mysql workbench) même après les avoir laissées s'exécuter pendant plusieurs heures? Suis-je juste sous provisioned?Google Cloud SQL sélection des lignes qui n'existent pas dans une autre table
J'ai une instance sql cloud 4 standard n1 4 (4cpu, 15GB ram). Les deux tables sont ci-dessous. Il existe également un index sur customer_id pour la table un. Le tableau 2 contient 885481 lignes et le tableau 1 contient 1891653 lignes.
J'ai essayé trois variantes d'une requête pour rechercher des ID client dans la table 1, où elles n'existent pas dans la table 2 (représentée par account_group_id).
Ce que je me serais attendu à être plus performants et retourner réellement:
Select customer_id
FROM Table1 as a
WHERE NOT EXISTS(
Select account_group_id
FROM Table2 as b WHERE b.account_group_id = a.customer_id
)
En tant que sous requête:
Select customer_id
FROM Table1
WHERE customer_id NOT IN(
Select account_group_id
FROM Table2
)
comme une jointure gauche:
SELECT customer_id
FROM Table1 as a
LEFT OUTER JOIN Table2 as b ON a.customer_id = b.account_group_id
WHERE b.account_group_id IS NULL
EDIT: Donc, après quelques bricolages et en fait en utilisant EXPLAIN avant de poster ma question, la table2 subq uery effectue une analyse FULL TABLE pour une raison quelconque. J'ai essayé cette requête sur mes environnements de test/de transfert avec le même index et j'y vois un index. Maintenant, je suis encore plus confus.
Même si j'ajoute un indice d'indice de force, l'optimiseur de requête refuse d'utiliser la clé primaire.
C'est ce que le plan de requête ressemble à mon environnement de mise en scène:
Toute pensée pourquoi cela se produit?
Tableau 1:
Tableau 2:
dans la troisième variante, vous avez besoin d'une jointure gauche – soft87