我在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';
上图中显示的eid(int)与我们在第一个sql中添加的完全相同。
我认为问题是由“字符集”引起的,但不确定由于eid是int类型。
PAT:只有特殊行会被第一个sql忽略,该表中的大多数行都可以通过过滤器eid + cc_number进行搜索。
任何建议都值得赞赏。