Если у вас есть отличный набор значений для (a, b, c), вы можете разбить таблицу на эти значения. List Columns Partitioning. После того, как таблица была разделена, тогда «удаление» вместо этого будет удалять разделы и будет очень быстрым.
MySQL 5.7 обеспечивает поддержку разделения LIST COLUMNS. Это вариант разделения LIST, который позволяет использовать несколько столбцов в качестве ключей разделов, а для столбцов типов данных, отличных от целых, для использования в качестве разделяющих столбцов;
Пример таблицы из документации:
CREATE TABLE customers_1 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY LIST COLUMNS(city) (
PARTITION pRegion_1 VALUES IN('Oskarshamn', 'Högsby', 'Mönsterås'),
PARTITION pRegion_2 VALUES IN('Vimmerby', 'Hultsfred', 'Västervik'),
PARTITION pRegion_3 VALUES IN('Nässjö', 'Eksjö', 'Vetlanda'),
PARTITION pRegion_4 VALUES IN('Uppvidinge', 'Alvesta', 'Växjo')
);
Я не мог найти пример в документации с использованием нескольких столбцов в качестве ключа секционирования, но как можно было бы ожидать, что это будет выглядеть как ...
CREATE TABLE customers_2 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY LIST COLUMNS(first_name,last_name) (
PARTITION me_partition VALUES IN(('Alden','W'),('Aldino','W')),
PARTITION you_partition VALUES IN(('Pooja','Gupta'),('PJ','Gupta'))
);
Чтобы разделить стол, вы можете использовать немного динамических sql-моделей для причудливых штанов.
SET SESSION group_concat_max_len = 1000000000;
SET @i = 0;
SELECT CONCAT('ALTER TABLE customers_2
PARTITION BY LIST COLUMNS(first_name,last_name) (
',GROUP_CONCAT('PARTITION partition_',@i:[email protected]+1,' VALUES
IN((''',d.first_name,''',''',d.last_name,'''))' SEPARATOR
',\n\t'),'
);')
FROM (
SELECT DISTINCT first_name, last_name
FROM customers_2
) d;
Это построить следующую альтер заявление
ALTER TABLE customers_2
PARTITION BY LIST COLUMNS(first_name,last_name) (
PARTITION partition_1 VALUES IN(('Alden','W')),
PARTITION partition_2 VALUES IN(('Jon','Smith')),
PARTITION partition_3 VALUES IN(('Other','Name')),
...
);
как получить кортеж в "в" п ..? – scaisEdge
Возможный дубликат [Правильный способ передачи от 5000 до 100 000 значений в mysql WHERE] (http://stackoverflow.com/questions/39659553/correct-way-to-pass-between-5-000-to-100- 000-значения-в-MySQL-где-п) – e4c5