Erzwingen Ich versuche, eine Abfrage zu optimieren, aber erklären Abfrage gibt, dass mysql keinen Index verwendet.Nicht in der Lage, Index auf Mysql-Index
Dies ist meine Frage:
explain
SELECT t1.*
FROM crypto_screener.prices as t1 FORCE INDEX (PRIMARY)
where t1.id = (
select t2.id
from (select *
from
crypto_screener.prices FORCE INDEX (allfilters)
where date > '2017-12-07'
) as t2
where t2.symbol = t1.symbol
order by t2.id desc
limit 1
)
;
Dies ist show index from prices;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
prices 0 PRIMARY 1 id A 57718 NULL NULL BTREE
prices 0 priceid 1 id A 57718 NULL NULL BTREE
prices 1 pricefilters 1 symbol A 369 NULL NULL YES BTREE
prices 1 pricefilters 2 date A 57718 NULL NULL YES BTREE
prices 1 datefilters 1 date A 506 NULL NULL YES BTREE
prices 1 symbolfilters 1 symbol A 421 NULL NULL YES BTREE
prices 1 allfilters 1 id A 57718 NULL NULL BTREE
prices 1 allfilters 2 symbol A 57718 NULL NULL YES BTREE
prices 1 allfilters 3 date A 57718 NULL NULL YES BTREE
Die Abfrage in der Tabelle nicht jetzt mit der Datenmenge ausgeführt werden. Wie kann ich das optimieren?
Sie können 'allfilters' hier nicht verwenden (da es ein Index über 3 Spalten und Datum ist nicht die erste Spalte im Index, also im Grunde ist dieser Index nutzlos, da Sie bereits einen Index über die ID haben) Können Sie verwenden 'Datumsfilter'? –
@RolandStarke Ja, Datefilters funktioniert auf t2 –
Großartig. Reicht es, um die Leistung zu steigern? Ich kann mir nicht vorstellen, was diese Abfrage auswählt. Es wäre interessant zu wissen. –