インデックスを使用する必要があると思っていた mysql クエリがありますが、まだ多くの行をスキャンする必要があるようです (と思います)。
これが私のクエリです:
SELECT DISTINCT DAY(broadcast_at) AS 'days'
from v3211062009
where month(broadcast_at) = 5 and
year(broadcast_at) = 2012
and deviceid = 337 order by days;
私のテーブルには、broadcast_at、deviceidにインデックスが設定されています。ただし、このクエリの Explain の結果は次のようになります。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE v3211062009 ref indx_deviceid,indx_tracking_query indx_tracking_query 4 const **172958** Using where; Using index; Using temporary; Using filesort
なぜそんなに多くの行を検索する必要があるのか わかりません。この deviceid レコードの行の総数はわずか184085であるため、クエリは結果セットを取得するためだけにすべての行を調べているようです。Broadcast_at のインデックスが機能していません。
私は明らかに根本的に間違ったことをしていますが、それを理解することはできません。インデックス内の列の順序を変更してもうまくいきませんでした。