집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 파티션 필드 열에 대해 별도의 인덱스를 생성해야 합니까?
파티션 필드가 기본 키의 일부여야 한다는 것은 누구나 알고 있습니다. 그러면 복합 기본 키를 생성한 후 파티션 필드에 별도의 인덱스를 추가해야 합니까? 효과적인가요? 이 글은 MySQL 파티션 필드 컬럼에 대한 별도의 인덱스 구축이 필요한지 여부에 대한 관련 정보를 주로 소개합니다. 이 글은 예제를 통해 검증되었으며, 이를 필요로 하는 모든 사람들의 이해와 학습을 위한 확실한 참고 학습 가치를 담고 있습니다. 소규모로 함께 배워봅시다.
1. 새로운 테이블을 만듭니다.(생성 시간을 기준으로 월별로 분할)
CREATE TABLE `effect_new` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `type` tinyint(4) NOT NULL DEFAULT '0', `timezone` varchar(10) DEFAULT NULL, `date` varchar(10) NOT NULL, `hour` varchar(2) DEFAULT NULL, `position` varchar(200) DEFAULT NULL, `country` varchar(32) NOT NULL, `create_time` datetime NOT NULL DEFAULT '1970-01-01 00:00:00', PRIMARY KEY (`id`,`create_time`), KEY `index_date_hour_coun` (`date`,`hour`,`country`) ) ENGINE=InnoDB AUTO_INCREMENT=983041 DEFAULT CHARSET=utf8 PARTITION BY RANGE (TO_DAYS (`create_time`)) (PARTITION p0 VALUES LESS THAN (736754) ENGINE = InnoDB, PARTITION p1 VALUES LESS THAN (736785) ENGINE = InnoDB, PARTITION p2 VALUES LESS THAN (736815) ENGINE = InnoDB, PARTITION p3 VALUES LESS THAN (736846) ENGINE = InnoDB, PARTITION p4 VALUES LESS THAN (736876) ENGINE = InnoDB, PARTITION p5 VALUES LESS THAN (736907) ENGINE = InnoDB, PARTITION p6 VALUES LESS THAN (736938) ENGINE = InnoDB, PARTITION p7 VALUES LESS THAN (736968) ENGINE = InnoDB, PARTITION p8 VALUES LESS THAN (736999) ENGINE = InnoDB, PARTITION p9 VALUES LESS THAN (737029) ENGINE = InnoDB, PARTITION p10 VALUES LESS THAN (737060) ENGINE = InnoDB);
2.
INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('1', '0', 'GMT+8', '2017-07-01', '', 'M-NotiCleanFull-FamilyRecom-0026', '', '2017-07-02 00:07:02'); INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('2', '1', 'GMT+8', '2017-09-30', '23', 'Ma5dtJub', 'EG', '2017-10-01 00:00:00'); INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('3', '1', 'GMT+8', '2017-09-10', '10', '28', 'DZ', '2017-09-11 00:08:20'); INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('4', '1', 'GMT+8', '2017-02-03', '20', '32', 'AD', '2017-02-04 00:00:00'); INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('5', '0', 'GMT+8', '2017-03-05', '2', NULL, 'AI', '2017-03-06 02:10:00'); INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('6', '0', 'GMT+8', '2017-09-23', '13', 'M-BrandSplash-S-0038', 'AG', '2017-09-23 13:00:00'); INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('7', '1', NULL, '2017-10-13', '12', 'BB-Main-AppAd-0018', 'AF', '2017-10-14 12:00:00'); INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('8', '0', 'GMT+8', '2017-10-28', '2', 'M-ChargeReminder-S-0040', 'AE', '2017-10-29 00:00:00'); INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('9', '1', 'GMT+8', '2017-10-09', NULL, '30', 'AI', '2017-10-10 00:09:00'); INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('10', '0', 'GMT+8', '2017-10-05', '5', ' M-BrandSplash', 'LA', '2017-10-06 05:10:00');
결과는 다음과 같습니다.
table
가능 _keys | key | key_len | ref | rows | filtered | extra | 1 | SIMPLE | effect_new | p8 | |
null | null | null | null | 391515 | 10 | where 사용 | 4. effect_new 인덱스 idx_ctime | 을 추가합니다. 5. 인덱스 추가 후 실행 계획을 분석합니다. |
table
possible_keys | key | key_len | ref | rows | filtered | extra | 1 | SIMPLE | effect_new | p8 | |
idx_ctime | id x_ctime | 5 | const | 60760 | 100 | null | 6. 결론: | 이 필드를 기준으로 테이블을 분할했지만 인덱스와 동일시할 수는 없습니다. 파티셔닝 후에는 필드에 특정 값을 가진 레코드가 특정 파티션에 포함될 것이라고 할 수 있지만 인덱스가 아니므로 찾기가 어렵습니다. | 때로는 기본 키가 분할 기준 열과 동일하지 않을 때가 있습니다. 이때 기본 키가 클러스터형 인덱스를 구성하려면 분할 기준 열을 포함하여 복합 기본 키로 만들어야 합니다. 그렇다면 이 경우 파티셔닝 컬럼에는 인덱스가 없는 걸까요? 예, 하지만 충분히 빠르지 않습니다. 이 복합 인덱스에서 분할 기준 열이 첫 번째 순위가 아니면 충분히 빠르지 않습니다. 분할 기준 열이 검색문에서 필터 조건으로 자주 사용되는 경우에는 필요합니다. 분할 기준 열에 추가 열을 추가하려면 별도의 인덱스를 만듭니다. |
MYSQL의 파티션 필드는 기본 키 필드에 포함되어야 합니다_MySQL
다양한 MySQL 스토리지 엔진과 다양한 파티션 필드가 쿼리에 미치는 영향_MySQL
MySQL 파티션 테이블 파티션 온라인 수정 파티션 필드_MySQL
위 내용은 MySQL 파티션 필드 열에 대해 별도의 인덱스를 생성해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!