Постоянные, случайные или зависящие от часового пояса выражения в (под) функции разделения не допускаются - PullRequest
0 голосов
/ 19 февраля 2019

mytable вот так:

CREATE TABLE `test1` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `project_id` int(11) NOT NULL,
    `md5` varchar(255) NOT NULL,
    `create_time` datetime NOT NULL,
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`,`project_id`,`md5`),
    KEY `index_id` (`md5`),
) ;

Я хочу разделить на md5 и project_id。, поэтому я создаю функцию:

CREATE FUNCTION f2(md5 VARCHAR(255), project_id int(11))
RETURNS int
return MOD(md5, 10) + project_id;

Когда я разбиваю эту таблицу, используюэтот sql:

ALTER TABLE test1 PARTITION BY HASH(f2(md5, project_id)) PARTITIONS 100;

показывает:

Не допускаются выражения с постоянной, случайной или временной зависимостью в функции (под) разбиения.

Но ответ не является постоянным, случайным и зависит от часового пояса.Так что я не знаю, как сделать с id, кто может мне помочь?большое спасибо.

1 Ответ

0 голосов
/ 19 февраля 2019

Если вы посмотрите документацию MySQL по хеш-разделам , вы увидите, что запрещены для некоторых конструкций :

Запрещенные конструкции.Следующие конструкции не допускаются в выражениях разделения:

Хранимые процедуры, хранимые функции , UDF или плагины.Объявленные переменные или пользовательские переменные.

Для временного решения попробуйте просто вставить логику, стоящую за вашей функцией UDF:

ALTER TABLE test1 PARTITION BY HASH(MOD(md5, 10) + project_id) PARTITIONS 100;

Даже если функцию можно заставить работать, она бывозможно, это не так, и прямое выражение - лучший путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...