J'utilise un serveur MySQL dans lequel j'ai mis journal des requêtes lentes avec les paramètres suivantsMySQL journal lent, même après l'indexation des colonnes
log-slow-queries=/var/log/mysql/mysql-slow-queries.log
long_query_time=1
log-queries-not-using-indexes
Je liste d'événements suivants pour chaque minute en cas de MySQL.
UPDATE mytable SET playing = 0
WHERE playing != 0
AND (TIMESTAMPDIFF(MINUTE , lastplayed, NOW()) >10)
OR (lastplayed IS NULL
AND ispresent= 0
);
Maintenant toutes ces colonnes playing, lastplayed, and ispresent
sont indexés, mais encore ce apparaît dans le journal des requêtes lentes avec les détails suivants
# Query_time: 0.000585 Lock_time: 0.000159 Rows_sent: 0 Rows_examined: 316
Pourquoi cette requête est affiché dans log lent?
Vous supposez que la raison principale est que vous avez un OU, avec les clauses OR n'ayant pas tout à fait les mêmes colonnes. En outre, je soupçonne que vous avez un problème de priorité d'opérateur avec l'ET et l'OR (c'est-à-dire que _playing! = 0_ ne s'applique qu'au premier horodatage). – Kickstart
Il a fallu moins d'une milliseconde, donc c'est très rapide. Pensez-vous qu'il y aura des millions de lignes dans la table un jour? Si oui, alors vous devriez vous en soucier. –