按ID丢失分区哈希中的数据

时间:2018-11-09 04:29:46

标签: mysql partition

我在mysql表分区使用中遇到了一个问题。 表创建

CREATE TABLE `talk_record_gz` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `eid` int(10) unsigned NOT NULL DEFAULT '0',
  `cc_number` varchar(128) NOT NULL DEFAULT '',
  `gz_res_token` varchar(512) NOT NULL DEFAULT '',
  `gz_file_name` varchar(512) NOT NULL DEFAULT '',
  `gz_status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1=wait,2=uploading,3=success',
  PRIMARY KEY (`id`),
  KEY `idx_eid` (`eid`),
  KEY `idx_ccnumber` (`cc_number`),
  KEY `idx_token` (`gz_res_token`(255))
) ENGINE=InnoDB AUTO_INCREMENT=504238 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY HASH (id)
PARTITIONS 10 */ 

问题:

下面的执行sql将不会获得任何数据(是的,当表通过hash [id]分成多个分区时,我们应该过滤id,但是对于完整搜索,无论如何都应该找到数据)

select * from talk_record_gz where cc_number='api00400013602154166222649626fD3conf_1541662225484' and eid=79362;

但是如果我们按如下所示删除过滤器eid = 79632

select * from talk_record_gz where cc_number='api00400013602154166222649626fD3conf_1541662225484';

我们将获得如下数据     enter image description here

上图中显示的eid(int)与我们在第一个sql中添加的完全相同。

我认为问题是由“字符集”引起的,但不确定由于eid是int类型。

PAT:只有特殊行会被第一个sql忽略,该表中的大多数行都可以通过过滤器eid + cc_number进行搜索。

任何建议都值得赞赏。

0 个答案:

没有答案