使用分区名称与位置子句的 MySQL 查询



>我有一个按日期分区的表。我注意到,当我使用分区名称查询表时,它比使用 where 子句查询更快。

例如:

select max(db_load_timestamp) from my_table partition(p20191008);(在 9 秒内执行(

给出结果的速度比

select max(db_load_timestamp) from my_table where date='2019-10-08';(在 50 秒内执行(

知道为什么会发生这种情况,因为两个查询应该花费大致相同的时间,因为两个查询都利用了使用分区?

当您使用分区时,您正在重新分配访问的数据量。 我找到了这句话:

分区允许将表、索引和按索引组织的表细分为较小的部分,因此仅访问一小部分数据的查询可以运行得更快,因为要扫描的数据更少。

在此链接

注意根据文档分区已弃用...

是否使用分区:

INDEX(db_load_timestamp)

会有所帮助

select max(db_load_timestamp) from my_table

和。。。

INDEX(date, db_load_timestamp)

会有所帮助

select max(db_load_timestamp) from my_table where date='2019-10-08';

在这两种情况下,结果应该在非分区表上返回得如此之快,以至于您甚至不会考虑使用分区。

这个答案的寓意:拥有最佳索引通常比分区更重要。

最新更新