쿼리를 최적화하려고하지만 쿼리가 mysql이 인덱스를 사용하지 않는다고 설명합니다.mysql 인덱스에 인덱스를 강제로 추가 할 수 없습니다.
이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
)
;
이 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
테이블 내의 데이터의 양을 지금 실행되지 않는 쿼리입니다 :
이
내 쿼리입니다. 이것을 어떻게 최적화 할 수 있습니까?
여기에 'allfilters'를 사용할 수 없습니다 (3 열 이상의 색인으로 날짜가 색인의 첫 번째 열이 아니므로 기본적으로이 색인은 이미 색인에 대한 색인이 있으므로 쓸모가 없습니다). 'datefilters'? –
@RolandStarke 네, datefilters는 t2에서 작동합니다. –
좋아요. 성능을 향상시키는 것으로 충분합니까? 나는이 쿼리가 선택하고있는 것에 대해 머리를 감쌀 수 없다. 알고있는 것이 재미있을 것입니다. –