Je travaille sur une requête qui récupère la liste des rapports de service avec ses détails. La requête renvoie également le rapport de service qui manque dans la base de données en mettant '-' dans la colonne des détails. Après avoir passé quelque temps là-dessus, je suis venu avec une requête comme celle-ci: -MySQL - Problème de performance lors de la mise à niveau de 5.5.27 à 5.7
select
22000+n as sSrn ,IFNULL(m.mType,'---') machineType, ifnull(c.custName,'---') as customerName, IFNULL(sDos,'---') DateOfService , IFNULL(sSrgd,'---') AS ServiceRptDate ,IFNULL(sTechnician,'---') AS technician ,IFNULL(CAST(sPcdescription AS char(100)) ,'---') AS remarks , IFNULL(CAST(m.machineID AS char(100)) ,'---') AS machineID
from
(
SELECT @curRow := @curRow + 1 AS n
FROM service CROSS JOIN dummytable
JOIN (SELECT @curRow := 0) r
) numbergen
LEFT JOIN service s ON sSrn = 22000+n
LEFT JOIN machine m ON s.machineID = m.machineID
LEFT JOIN customer c ON c.custID = m.custID
LIMIT 0,10
La requête génère en fait une table avec beaucoup de lignes et de le comparer avec les données de la table de service. Si le numéro de service n'est pas consécutif, il générera le numéro de rapport manquant avec '-' comme autres colonnes. Et le résultat idéal est accompli, qui est comme ceci.
Mais le problème est que la requête est en cours d'exécution très lentement quand je mets à jour la version MySQL à 5.7 lorsque l'on compare à 5.5.27 (5.5.27 donne également une performance moyenne, mais encore utilisable.)) pour exemple:
secondes se sont écoulées pour MySQL 5.5.27: 1,48 SEC ** secondes ** se sont écoulées pour MySQL 5.7: 14,960 SEC
Dites-nous comment améliorer les performances des requêtes dans MySQL 5.7 ou SQL.
NOTE: Je comprends également que le tri automatique basé sur la première colonne ne fonctionne pas sur 5.7 ce qui me fait passer une commande dans la requête, ce qui entraîne plus de retard.
MISE À JOUR: expliquiez 5.5.27 Version
a) Veuillez ajouter la sortie d'explication (écrire 'expliquer' devant votre sélection, et afficher le résultat pour les deux bases de données) b) Ce que vous entendez par note. Il n'y a pas de "commande par" dans votre requête. Un «ordre par» supplémentaire peut, sans un index approprié, ralentir votre requête. Sans ordre par: prenez les 10 premières lignes (qui peuvent être celles que vous voulez ou non), donc 5.5 pourrait être rapide, mais seulement "correct" par hasard). Avec commande par: commander * tout * d'abord, puis utilisez les 10 premières lignes. c) Ajoutez vos index ou descriptions de tableaux et quelques exemples de données. d) Je ne suis pas sûr de comprendre la raison de la numérotation des lignes. – Solarflare
Qu'est-ce que 'dummytable'? Combien de lignes y a-t-il? Avez-vous vraiment besoin de "JOIN" à cela? –
Cela n'a aucun sens d'avoir 'LIMIT' sans' ORDER BY'. –