Я столкнулся с проблемой в использовании разделов таблицы 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 ниже, не получит данных (ДА, мы должны отфильтровать идентификатор, так как таблица разбивается на разделы по хэшу [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.
Любое предложение приветствуется.