私はこのスキーマを持つテーブルを持っています -
CREATE TABLE `ox_data_summary_device_hourly` (
`data_summary_device_hourly_id` bigint(20) NOT NULL AUTO_INCREMENT,
`date_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
...
...
PRIMARY KEY (`data_summary_device_hourly_id`),
KEY `ox_data_summary_device_daily_date_time` (`date_time`),
KEY `ox_data_summary_device_daily_ad_country_date_time` (`ad_id`,`date_time`),
KEY `ox_data_summary_device_daily_zone_id_date_time` (`zone_id`,`date_time`)
) ENGINE=InnoDB AUTO_INCREMENT=3478837682 DEFAULT CHARSET=latin1
したがって、次のインデックスがテーブルに設定されます-
KEY `ox_data_summary_device_daily_date_time` (`date_time`),
KEY `ox_data_summary_device_daily_ad_country_date_time` (`ad_id`,`date_time`),
KEY `ox_data_summary_device_daily_zone_id_date_time` (`zone_id`,`date_time`)
フィルターをオンにして、このテーブルにこの説明クエリがありますdate_time
-
explain SELECT *
FROM ox_data_summary_device_hourly data_hourly
WHERE
data_hourly.date_time >= '2012-09-01 00:00:00' AND data_hourly.date_time < '2012-09-15 13:00:00'
GROUP BY data_hourly.type ORDER BY data_hourly.type DESC
ox_data_summary_device_daily_date_time
これは、インデックスが適用されていないことを示す出力です-
ただし、上記のクエリの日付フィルターを次のように変更すると、
data_hourly.date_time >= '2012-09-01 00:00:00' AND data_hourly.date_time < '2012-09-14 13:00:00'
つまり、9 月 1 日から 9 月 15 日までではなく、9 月 1 日から 9 月 14 日までのクエリを実行すると、ox_data_summary_device_daily_date_time
インデックスが適用されます。さらに、範囲の終了日が より後の15 sep
場合、インデックスは適用されないことを確認しました。
私は困惑しています。9 月 15 日以降の日付範囲のデータがテーブルにあることを確認しました。
何か案は?