J'ai un problème avec une requête mySQL, car il prend trop de temps (environ 12 secondes) la table ont environ 70 000 dossiersma requête mySQL prend trop de temps (environ 12 secondes) - toute suggestion
ici est ma requête:
SELECT DATE(`orders`.`date`) AS `dater`,
COUNT(*) AS `amount`,
(SELECT SUM(`amount`) FROM `payment`
WHERE DATE(`dater`)=DATE(`payment`.`posted_date`)
) AS `charge`
FROM `orders`
GROUP BY `dater`
ORDER BY `dater` DESC
LIMIT 0,10
Comme vous pouvez le voir il y a 2 tables 1. tableau: commandes ce sont les tables de commandes ici, nous avons une colonne principale: la date (nous avons besoin ici pour compter les commandes par jour)
échantillon:
--------------------
date | id
--------------------
01-01-2017 | 1
--------------------
01-01-2017 | 2
--------------------
01-02-2017 | 3
--------------------
- table: paiement: il est la table des paiements nous avons ici 2 colonnes principales: posted_date, le montant (nous avons besoin ici pour obtenir la somme du champ montant pour la toute jour)
:
--------------------
posted_date | amount
--------------------
01-01-2017 | 100
--------------------
01-01-2017 | 50
--------------------
01-02-2017 | 200
--------------------
donc à la fin les résultats devraient être [date, le montant, la charge]
sûr en moins de temps, car il est impossible d'aller avec cette 12 secondes: D
Je vois que le problème est sur cette interne SELECT:
(SELECT SUM(`amount`) FROM `payment`
WHERE DATE(`dater`)=DATE(`payment`.`posted_date`)
) AS `charge`
toute suggestion de comment puis-je éviter de faire SELECT l'intérieur la requête SELECT?
Peut-être envisager d'indexer vos tables de données –
Cela 'COUNT (*)' est également un problème. Il doit passer par toute votre table et s'il n'est pas correctement indexé, il est encore pire. –
Pouvons-nous voir votre schéma? –