SELECT id, survey_id From Table1 Where survey_id IN( select survey_id from Table1 Group By survey_id having count(id)>1 ) THIS IS MY QUERY BUT I HAVE BIG DATA I GUESS STILL FETCHING IN IT IN MYSQL WORKBENCH. ANY IDEA I CAN MAKE THIS PROCESS FASTER ?
4 Réponses :
Select count(*),column from table group by column having count(column) > 1 You can simply group by directly. No need for sub query. Try to add index for column
L'OP ne semble pas intéressé à retourner le compte.
Vous pouvez regrouper vos données sans sous-requêtes:
SELECT id, GROUP_CONCAT(survey_id) as survey_ids FROM Table1 GROUP BY id HAVING COUNT(survey_id)>1;
Merci exécution de votre requête, récupérer maintenant, Quick plus question Comment écrire la requête Supprimer la conduite en double? Ma requête choisissait Duplicata SAVOIR Comment je peux supprimer le duplicata?
Salut Denis j'ai eu un résultat différent avec votre requête que la mienne: /
Parfois i suppose existe code> fonctionne mieux car il revient dès qu'il trouve la ligne:
id code> est la clé primaire dans la table. P> p>
Utilisez Expliquer code> pour voir le plan d'exécution de la requête. Le modèle de requête appelle ici un index approprié disponible.
Utilisez sur de grands ensembles, nous obtiendrons une meilleure performance lorsqu'un index peut être utilisé pour satisfaire un groupe, plutôt que d'une "utilisation de fichiers". Opération. P> Personnellement, j'éviterais le Nous voulons un index qui a Remarque: Si c'est INNODB et si avec cet indice défini, nous nous attendions à ce que le à nouveau, utilisez Expliquer code> pour voir le plan d'exécution de la requête.
dans (sous-requête) code> et utilisez plutôt une jointure à une table dérivée. Je ne sais pas que cela a un impact sur la performance ou dans quelles versions de MySQL peut y avoir une différence. Juste ma préférence personnelle d'écrire la requête de cette façon: p>
arond_id code> comme une colonne principale. Cela permet au groupe
par code> d'être satisfait de l'index, évitant une opération potentiellement coûteuse "à l'aide de FilseTort". Le même index sera également utilisé pour la jointure à la table d'origine. P>
ID code> est la clé de cluster , alors incluant la colonne code> code> n'utilise aucun espace supplémentaire (il applique une commande supplémentaire), mais plus important encore, il rend l'index A Index de recouvrement em> pour la requête extérieure (La requête peut être entièrement satisfaite à partir de l'index, sans rechercher de pages dans la table sous-jacente.) p>
explique code> sortie supplémentaire de sortie " Utilisation d'index "pour la requête externe et omettez" à l'aide de FilserSort "pour la table dérivée (vue en ligne). P>
expliquer code> pour voir l'exécution de la requête plan. p> p>
Et vous choisiriez ces méthodes sur une simple jointure (et distincte)?
@Strowberry: Oui. Je choisirais d'utiliser Expliquer pour voir le plan d'exécution. Je choisirais un modèle de requête qui utilise un index approprié. Je choisirais un motif de requête qui évite une opération coûteuse "à l'aide de FiltrySort". Je choisirais également ce modèle de requête pour l'affaire plus générale, au-delà de "au moins une autre rangée", par ex. Compte (S.ID)> 4 code>. Pour le cas particulier de
> 1 code>, je choisirais le modèle de sous-requête existant (démontré par FORPAS) lorsque nous avons une garantie que
ID code> est une clé primaire ou une clé unique, avec un index approprié disponible. Le motif de requête ici ne nécessite pas la clé primaire ID
S'il vous plaît ne criez pas et voyez: Pourquoi devrais-je fournir un MCRE pour ce qui me semble être une requête SQL très simple? .
L'écriture dans tout le capital est considérée comme criant. Je suggère de le corriger. Vous pouvez également expliquer ce que cette requête est écrite?
Bienvenue, pour améliorer votre expérience, s'il vous plaît lire Comment demander , un Question de sujet , puis regardez le Liste de contrôle de la question , La question parfaite < / a>, comment créer un exemple minimal, complet et vérifiable et Prendre la tournée
Je suppose que vous voulez dire que vous avez 17 949 366 lignes dans votre table, dans MySQL, pas dans Workbench comme c'est juste un programme