Почему вы не используете mySQL таблицу разделов в своем предложении, конечно, если бы я мог понять, что вы предлагаете. Я использовал таблицы PARTITION для множества предложений, и у нас есть несколько таблиц с почти 100 миллионами отчетов.
Вот несколько примеров.
Создание таблицы клиентов, разделенной по группам клиентов name:
CREATE TABLE customers (
id INT NOT NULL,
name VARCHAR(30),
customer_group CHAR(10),
settings JSON, # very useful when you are working with no structured data
created_at DATETIME
)
PARTITION BY LIST(store_id) (
PARTITION g1 VALUES IN ('customer1'),
PARTITION g2 VALUES IN ('customer2'),
PARTITION g3 VALUES IN ('customer3')
);
Теперь вы можете вставить некоторые данные:
INSERT INTO `customers` VALUES(1, 'Customer 1', 'customer1', '{}', NOW());
INSERT INTO `customers` VALUES(2, 'Customer 2', 'customer2', '{}', NOW());
INSERT INTO `customers` VALUES(3, 'Customer 3', 'customer3', '{}', NOW());
Конечно, если у вас нет большой таблицы с большим количеством результатов, я думаю, что этот пример может быть не очень тебе помочь. Но представьте, что вы хотите добавить данные от другого клиента и не хотите, чтобы эти данные создавали беспорядок для других наших клиентов. Итак, если вы попытаетесь вставить «customer4» в таблицу customers
, вы будете заблокированы mySql, для этого вам нужно включить другой раздел следующим образом:
ALTER TABLE `customers` ADD PARTITION (PARTITION `customer4` VALUES IN ('customer4'));
Итак, если вам нужно теперь, чтобы удалить некоторые данные из большой таблицы и передать по параметру только группу клиентов, это займет некоторое время, но, поскольку вы используете таблицы разделов, вы можете просто сделать это.
Если вы хотите удалить все Данные customer4:
ALTER TABLE `customers` TRUNCATE PARTITION `customer4`;
ИЛИ, если вы хотите УБРАТЬ НЕКОТОРЫЕ РАЗДЕЛЫ, такие как customer1 и 3, не затрагивая всю таблицу клиентов:
ALTER TABLE `customers` DROP PARTITION `customer1`,`customer3`;
Если вы хотите сделать свою систему довольно более строго, используя ссылки клиентов в ваших запросах, вы можете использовать имя PARTITION внутри вашего запроса:
SELECT * FROM `customers` PARTITION(`customer2`);
Результатом этого запроса будет простая строка с данными клиента2.
Это несколько простых примеров, которые вы могли бы сделать с таблицами PARTITIONS, я не знаю, вы читали об этом, если я не думаю, что это может быть вариант для вас, в противном случае я думаю, что Я не очень хорошо понимаю вашу проблему, и мне очень жаль. Надеюсь, что это поможет!
Эти дополнительные ссылки