Comment optimiser une requête SQL avec plus de 2 millions de lignes
<p>J'ai une base de données SQL contenant plus de 2 millions de lignes et elle se développe rapidement. Il n'y a pas beaucoup de colonnes, juste <code>code, prix, date et stationID</code>. </p>
<p>Le but est d'obtenir le dernier prix par code et ID de station.
La requête fonctionne très bien mais prend plus de 10 secondes. </p>
<p>Existe-t-il un moyen d'optimiser la requête ? </p>
<pre class="brush:php;toolbar:false;">$statement = $this->pdo->prepare(
'AVEC CTE COMME
(
SELECT stationID AS ind, code, CAST (price AS DOUBLE) AS prix, date
,ROW_NUMBER() PLUS(
PARTITION PAR code, ID station
COMMANDER PAR date DESC
) COMME le plus récent
DE prix
)
SÉLECTIONNER *
DE CTE
OÙ dernier = 1
'
);
$instruction->exécuter();
$results = $statement->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_ASSOC);</pre>
<p>Modifier :
La première colonne a un index appelé « id ». Je ne sais pas si cela aide. </p>
<p>La base de données (InnoDB) ressemble à ceci : </p>
<pre class="brush:php;toolbar:false;">id primaire - int
IDstation - int
code - entier
prix-décimal(10,5)
date - dateheure</pre>
<p>Modifier 2 :</p>
<p>Les résultats doivent être regroupés par stationID et plusieurs lignes doivent être affichées pour chaque stationID. Une ligne pour chaque code avec la dernière date.Description :</p>
<pre class="brush:php;toolbar:false;">22456 :
code: 1
prix : 3
date: 2023-06-21
code: 2
prix : 2
date: 2023-06-21
code: 3
prix : 5
date: 2023-06-21
22457 :
code: 1
prix : 10
date: 2023-06-21
code: 2
prix : 1
date: 2023-06-21
code: 3
prix : 33
date : 2023-06-21</pré>
<p>La sortie json doit être 像这样:</p>
<pre class="brush:php;toolbar:false;">{"1000001":[{"code":1,"prix":1.661,"date":"2023-06- 06 12:46:32", "dernier": 1}, {" code ": 2, " prix ": 1,867, " date " : " 2023-06-06 12:46:32 ", "dernier": 1}, {" code ": 3," prix ": 1,05, " date ": " 2023-06-06 12:46:32", " dernier ": 1}, {"code":5,"prix":1,818,"date":"06/06/2023 12:46:32","dernier":1},{"code":6, "prix": 1,879, "date": "06/06/2023 12:46:32", "dernier": 1}], "1000002": [{" code ": 1," ;prix":1,65,"date":"03/06/2023 08:53:26","dernier":1}, {"code":2,"prix":1,868," date": "2023-06-03 08:53:26", "dernier": 1}, {" code ": 6, " prix ": 1,889, " date ": " 2023-06 -03 08:53:27", "dernier" : 1}],…</pre></p>