mysql中的key 分区为什么总是一半有数据,一半没有数据?

华夏小卒 2014-08-12 11:59:12
CREATE TABLE `pis_supply_chain_a` (
`ID` varchar(50) NOT NULL,
`CMMDTY_CODE` varchar(18) NOT NULL,
`CITY_TO` varchar(12) DEFAULT NULL,
`LOGISTICS_RAD_MODE` varchar(3) DEFAULT NULL,
`CITY_FROM` varchar(12) DEFAULT NULL,
`VERSION_NO` varchar(18) DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL,
`UPDATE_TIME` datetime DEFAULT NULL,
`DELETE_FLAG` varchar(4) DEFAULT 'N',
PRIMARY KEY (`ID`,`CMMDTY_CODE`),
UNIQUE KEY `supply_chain_a_index` (`CMMDTY_CODE`,`CITY_TO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='1\n3000W10'
PARTITION BY KEY (CMMDTY_CODE) PARTITIONS 10


mysql> SELECT TABLE_NAME,PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME ='pis_supply_chain_a';
+--------------------+----------------+------------+
| TABLE_NAME | PARTITION_NAME | TABLE_ROWS |
+--------------------+----------------+------------+
| pis_supply_chain_a | p0 | 3630867 |
| pis_supply_chain_a | p1 | 0 |
| pis_supply_chain_a | p2 | 4537399 |
| pis_supply_chain_a | p3 | 0 |
| pis_supply_chain_a | p4 | 5225392 |
| pis_supply_chain_a | p5 | 0 |
| pis_supply_chain_a | p6 | 5495859 |
| pis_supply_chain_a | p7 | 1 |
| pis_supply_chain_a | p8 | 4757965 |
| pis_supply_chain_a | p9 | 0 |
+--------------------+----------------+------------+
10 rows in set (0.35 sec)



mysql> select distinct CMMDTY_CODE from pis_supply_chain_a limit 20;
+--------------------+
| CMMDTY_CODE |
+--------------------+
| 000000000100003931 |
| 000000000100004594 |
| 000000000100005662 |
| 000000000100019670 |
| 000000000100025155 |
| 000000000100028229 |
| 000000000100028764 |
| 000000000100030935 |
| 000000000100032337 |
| 000000000100032338 |
| 000000000100033242 |
| 000000000100034839 |
| 000000000100039735 |
| 000000000100039837 |
| 000000000100039848 |
| 000000000100040161 |
| 000000000100044946 |
| 000000000100044950 |
| 000000000100048556 |
| 000000000100050836 |
+--------------------+
20 rows in set (0.02 sec)
...全文
1187 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
new_up 2015-12-31
  • 打赏
  • 举报
回复
猜测只有在2的n次方减一长度是才会都有值
华夏小卒 2014-08-13
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
引用
17.2.4. KEY Partitioning Partitioning by key is similar to partitioning by hash, except that where hash partitioning employs a user-defined expression, the hashing function for key partitioning is supplied by the MySQL server. MySQL Cluster uses MD5() for this purpose; for tables using other storage engines, the server employs its own internal hashing function which is based on the same algorithm as PASSWORD().
算法问题。
嗯,查过资料,但是对这个password()函数不太了解。 有没有办法解决呢。 或者说,这算是一个bug吗?
华夏小卒 2014-08-13
  • 打赏
  • 举报
回复
一个同事根据password函数,分析并测出,key分区,只能指定分区数目为质数,才能保证每个分区都有数据。 我测了下,从11个分区,到17个分区。 只有11,13,17 ,这3个分区的数据是基本平均分布的。
ACMAIN_CHM 2014-08-12
  • 打赏
  • 举报
回复
引用
17.2.4. KEY Partitioning Partitioning by key is similar to partitioning by hash, except that where hash partitioning employs a user-defined expression, the hashing function for key partitioning is supplied by the MySQL server. MySQL Cluster uses MD5() for this purpose; for tables using other storage engines, the server employs its own internal hashing function which is based on the same algorithm as PASSWORD().
算法问题。
  大家好,我是录制课程的老师,课程已经上线课堂,欢迎大家试听,感谢同学们的支持。在你们的学习我会全力助你提升MySQL技能,助你冲击更高年薪。支持课程答疑,支持一对一答疑服务,由课程老师直接回答。    MySQL凭借着它不错的性能、不错的稳定性、数据的安全性常年稳居行业老二宝座。    越来越多的DBA和后端同学在工作少不了和MySQL打交道,也经常会产生这样的疑问:    为什么我写的sql语句性能这么低?  为什么明明我建了索引却没有用到索引?  为什么突然我的数据就成了乱码?  为什么我备份的文件在主库恢复,数据无法同步到从库?  为什么我的数据数据不多,却占了很多的空间?  生产我应该选择哪种隔离级别?  生产都在使用innodb存储引擎,我却对它一无所知?  我应该怎么规划缓冲池才能让数据库性能更高?  为什么我做表数据迁移这么慢?  为什么我写的sql会造成那么多的锁冲突、死锁?  为什么我不能将数据恢复到任意时间点?  为什么我不能解决公司主从复制架构的故障?  吧啦吧啦一大堆问题……    在面试MySQL的一些知识更成为躲不过的问题,比如b+tree索引、MVCC、隔离级别的实现、锁的使用,主从复制,MySQL性能优化、事务两阶段提交等等都成为了面试考题重灾区。    我的课程就是从实际工作来,从问题出发,带着问题来学习MySQL,想解决问题就要学习新的知识,大家跟紧老司机,MySQL的面纱就会慢慢摘下。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧