mysql 在没有分区键的情况下查询已分区表时的性能影响

yv5phkfx  于 2023-10-15  发布在  Mysql
关注(0)|答案(1)|浏览(195)

假设我按月对一个大尺寸的表(比如6TB)进行分区。我们正在提供大约300 RPS的非常高的流量。
示例方案

Create table mydata(
    id bigint not null,
    date_created not null,
    uuid_val not null,
    Primary key (id,date_created),
    key uuid_idx uuid_val
    ) Partition by range(to_days(date_created) ...

如果我在where子句中没有date_created的情况下查询这个表,会对性能产生什么影响?它肯定不会给予更好的性能,因为它不能进行分区修剪,但是如果我基于索引uuid_瓦尔查询它,与具有相同模式的非分区表相比,会有什么影响呢?
我试着用6GB的数据进行基准测试,并通过索引而不是分区键进行查询(500,000次),与在非分区表上运行相同的查询相比,在多个分区中搜索的开销似乎非常小(0.1ms)。但为什么开销这么少。此外,我可以期待这样的数字与6TB的数据时,服务高流量?我可以查询分区表没有分区键,因为我可能没有在流。
我的MySQL版本是8。引擎= InnoDB

wrrgggsh

wrrgggsh1#

如果我基于索引uuid_瓦尔查询它,与具有相同模式的非分区表相比,会有什么影响?
在MySQL中,所有索引都是分区的本地索引。
由于如果不提供分区键值作为查询的一部分,分区修剪是不可能的,因此引擎将必须查询表的所有分区。
如果你有(例如)三个分区,那就是三倍的工作量。
在每个分区内,查询计划将完全相同(即,uuid_val上索引查找。
我可以查询分区表没有分区键,因为我可能没有在流。
是的,可以,但有上述限制。

相关问题