嗨,我编写了一个MySQL查询,如下所示。
SELECT device_uuid,
day_epoch,
hour,
zone_id,
is_repeat,
(day_epoch + (3600*hour)) AS hour_epoch
FROM tracking_daily_stats_zone_unique_device_uuids_per_hour
WHERE day_epoch >= 1552435200
AND day_epoch < 1553040000
AND venue_id = 46
AND zone_id IN (102,105,108,110,111,113,116,117,118,121,287)
我遇到了一个奇怪的问题,使我对MySQL的理解困惑。当我运行上述使用venue_id
(索引)的查询时,运行时间大约需要30秒。
当我删除venue_id
条件并保持其他所有条件不变时,运行时间将减少到9秒。
这是使用venue_id
时的解释,因为您看到它正在查看一个分区,我认为它应该更快。
以下是未使用venue_id
且正在使用所有分区的说明,我以为应该更慢
“上面的图像没有显示所有分区,因为如果我显示所有分区,我将无法对其进行截图。”
上图没有显示所有分区,因为如果我显示所有分区,我将无法对其进行屏幕快照。您可能已经计算出表数据已在venue_id
上进行分区,其背后的原因这是为了加快查询速度。
这是此表的索引的屏幕截图: