私は約10mioの行と1つのフラットテーブルを持って、各行は15の列を持っています。 インデックスはcolumn_1、column_2、column_3、およびmy_timeに設定されています。MySQLのカウント(DISTINCT)が非常に遅い - サブクエリでうまくいく?
SELECT Date(my_time) my_time,
count(DISTINCT column_1) c_c1,
count(DISTINCT column_2) c_c2
FROM `table_name`
WHERE `column_3` in (10,11,100,50,213,756)
AND Date(my_time) > '2016-09-01'
AND Date(my_time) < '2016-09-30'
GROUP BY Date(my_time)
ORDER BY Date(my_time) ASC
結果には約20-30秒かかりました。
サブクエリを使用してこのクエリを改善する方法は誰にも分かりますか? サブクエリの場合は、サンプルクエリを表示して、パフォーマンスを上げる方法を教えてください。
ありがとうございました!
create index idx_speedy on table_name(column_3, my_time);
またはそれ以上でも被覆インデックス:あなたはおそらく適切なインデックスでこれをスピードアップすることができ
[EXPLAIN](https://dev.mysql.com/doc/refman/5.7/en/explain.html)を行い、あなたの答えに投稿してください。 –
'2016年9月1日午前0時00分00秒' AND BETWEEN my_timeする変更してみてください '2016年9月30日午前23時59分59秒' – Don
ID:1 SELECT_TYPE:SIMPLE 表:TABLE_NAME タイプ:ALL possible_keys: my_time、column_3 key:NULL key_len:NULL ref:NULL 行:.... 追加:Using where; filesortを使用する – user1891898