分别在关键分区表和普通表上测量性能。但我们无法通过分区找到任何性能改进。查询被修剪。
在RHEL 4上使用MySQL 5.1.47。
表格详情:
UserUsage
- 将为每个日期提供用户手机号码和数据使用情况的条目。手机号码和日期为PRI KEY。
UserProfile
- 查询每个手机号码的上表并存储摘要。手机号码PRI KEY。
CREATE TABLE `UserUsage` (
`Msisdn` decimal(20,0) NOT NULL,
`Date` date NOT NULL,
.
.
PRIMARY KEY USING BTREE (`Msisdn`,`Date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
PARTITION BY KEY(Msisdn)
PARTITIONS 50;
CREATE TABLE `UserProfile` (
`Msisdn` decimal(20,0) NOT NULL,
.
.
PRIMARY KEY (`Msisdn`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
PARTITION BY KEY(Msisdn)
PARTITIONS 50;
第二个表由perl程序中第一个表中的查询选择和按日期排序更新,查询为
select * from UserUsage where Msisdn=number order by Date desc limit 7
[perl中的处理数据]
update UserProfile values(....) where Msisdn=number
解释select的分区,仅显示在特定分区中扫描的行。
分区设计或查询有问题,因为与普通表相比,分区花费的时间几乎相同或更多?
答案 0 :(得分:0)
分区设计或查询有问题,因为与普通表相比,分区花费的时间几乎相同或更多?
没有。您对表进行分区,以便您不必一次备份或重新组织整个表。分区允许您更好地管理大型表。分区不是性能增强器。
答案 1 :(得分:0)
这取决于您的数据有多大以及查询如何从分区中受益。例如,如果您在5年内拥有1000万条记录并按年划分。选择一年中的记录的查询将通过分区而不是不进行分区来更快地执行。