함수 - mysql 시간 비교
datetime 열에 의해 테이블을 분할하는 방법? (3)
방금 최근에 http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html 에서 MySQL 블로그 게시물을 읽었습니다.
5.1 이전 버전에서는 날짜를 기준으로 파티셔닝을하기 위해 특수 체조가 필요했습니다. 위의 링크는 그것을 논의하고 예제를 보여줍니다.
버전 5.5 이상에서는 날짜 및 문자열과 같은 숫자가 아닌 값을 사용하여 직접 파티셔닝 할 수있었습니다.
datetime 열에 의해 MySQL 테이블을 분할하고 싶습니다. 하루는 파티션. create table scripts는 다음과 같습니다 :
CREATE TABLE raw_log_2011_4 (
id bigint(20) NOT NULL AUTO_INCREMENT,
logid char(16) NOT NULL,
tid char(16) NOT NULL,
reporterip char(46) DEFAULT NULL,
ftime datetime DEFAULT NULL,
KEY id (id)
) ENGINE=InnoDB AUTO_INCREMENT=286802795 DEFAULT CHARSET=utf8
PARTITION BY hash (day(ftime)) partitions 31;
하지만 하루의 데이터를 선택할 때 파티션을 찾을 수 없습니다. select 문은 다음과 같습니다.
explain partitions select * from raw_log_2011_4 where day(ftime) = 30;
다른 문을 사용하면 파티션을 찾을 수 있지만 언젠가는 데이터를 선택하지 않습니다.
explain partitions select * from raw_log_2011_4 where ftime = '2011-03-30';
아무도 말해 줄 수있는 방법 내가 언젠가는 데이터를 선택하고 파티션을 사용하는 방법. 감사합니다!
안녕 당신은 테이블 정의에서 다음과 같은 테이블의 정의에서 잘못된 파티션을하고 있습니다 :
CREATE TABLE raw_log_2011_4 (
id bigint(20) NOT NULL AUTO_INCREMENT,
logid char(16) NOT NULL,
tid char(16) NOT NULL,
reporterip char(46) DEFAULT NULL,
ftime datetime DEFAULT NULL,
KEY id (id)
) ENGINE=InnoDB AUTO_INCREMENT=286802795 DEFAULT CHARSET=utf8
PARTITION BY hash (TO_DAYS(ftime)) partitions 31;
그리고 당신의 선택 명령은 :
explain partitions
select * from raw_log_2011_4 where TO_DAYS(ftime) = '2011-03-30';
위의 명령은 TO_DAYS 명령을 다음과 같이 사용하는 것처럼 필요한 모든 날짜를 선택합니다.
mysql> SELECT TO_DAYS(950501);
-> 728779
mysql> SELECT TO_DAYS('2007-10-07');
-> 733321
TO_DAYS AS를 사용해야하는 이유 MySQL 최적화 프로그램은 파티션 정리 목적으로 두 가지 날짜 기반 함수를 인식합니다 : 1.TO_DAYS () 2.YEAR ()
그리고이 귀하의 문제를 해결할 것입니다 ..
CHAR
을 사용하지 마십시오. VARCHAR
사용하십시오. 이렇게하면 많은 공간을 절약 할 수 있으므로 I / O가 감소하므로 쿼리가 빨라집니다.
reporterip
: (46)은 IPv6조차도 IP 주소에 대해 불필요하게 커집니다. 16 바이트로 축소하는 방법을 포함하여 자세한 내용은 내 블로그 를 참조하십시오.
@Steyx가 제안한 바와 같이 범위별로 분할 PARTITION BY RANGE(TO_DAYS(...))
하지만 약 50 개 이상의 분할 영역이 없습니다. 파티션이 많을수록 "제거 (pruning)"에도 불구하고 쿼리 속도가 느려집니다. HASH
파티셔닝은 본질적으로 쓸모가 없습니다.
파티셔닝에 대한 더 많은 논의, 특히 당신이보고있는 타입 . 여기에는 시간이 지남에 따라 슬라이딩 파티션 집합에 대한 코드가 포함됩니다.