(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 문
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
[mysql WHERE 절에서 5,000에서 100,000 사이의 값을 전달하는 올바른 방법] 가능한 복제본 (http://stackoverflow.com/questions/39659553/correct-way-to-pass-between-5-000-to-100- 000-values-in-mysql-where-clause) – e4c5