Salut à tous.
C'est normal que la seconde exécution soit plus rapide que la première.
Dans la seconde exécution, MySql rechercher les résultats qu'il a stocké dans sa mémoire cache.
Ajouter des index est une des solutions.
Comme l'indique isabelle.letrong, les deux conditions font que vous n'utilisez pas vos index.
J'ajouterai aussi la condition sur le timestamp.
Vos conditions sont non saegable, c'est-à-dire qu'ils n'utilisent pas les index.
Autrement dit, il y a un balayage de toutes vos lignes.
C'est la cause de la lenteur de l'exécution de votre requête.
Voici votre requête :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| SELECT title,
author,
timestamp,
url,
contents,
image
FROM news
WHERE `author` NOT IN ('0AAAAAAAAAAAA')
AND timestamp < CURRENT_TIMESTAMP()
AND bdd_news LIKE 'live.copa_america_Venezuela'
ORDER BY `timestamp` DESC
LIMIT 0, 30; |
1) à quoi vous sert de faire ceci :
WHERE `author` NOT IN ('0AAAAAAAAAAAA')
Que contient la colonne `bdd_news` ?
Avez-vous plusieurs fois dans votre table le libellé : "live.copa_america_Venezuela" ?
Je vous conseille d'externaliser cette colonne dans une autre table.
Ainsi le libellé sera associé à un identifiant numérique.
Et cet identifiant sera utilisé dans votre table "news" à la place du libellé.
Pourquoi ? Car les accès seront plus performant.
L'usage que vous faites de votre timestamp est bizarre.
A quoi cela vous sert de tester si la date est inférieure à la date du jour ?
Dois-je comprendre qu'il n'existe pas de date plus grande que la date du jour ?
Le test sur la colonne "author" est inutile.
Cordialement.
Artemus24.
@+
Partager