2013年5月15日水曜日

MySQLはパーティションから数えると選択

Original post: http://anothermysqldba.blogspot.com/2013/05/mysql-count-and-select-from-partition.html

MySQLフォーラムは、パーティションごとに行数をカウントする方法についての質問があった。 
私はそれは同様に優れたブログの記事になるだろう考え出した。 

最初にこれらのパーティションの見直しのために持っていると、少なくともあなたが始められるようにいくつかの良いリンクです。 参考例ここで使用する例は、これらのページを始めています。 


> CREATE TABLE t2
-> (
-> dt DATE
-> )
-> PARTITION BY RANGE (TO_DAYS(dt))
-> (
-> PARTITION p01 VALUES LESS THAN (TO_DAYS('2007-01-01')),
-> PARTITION p02 VALUES LESS THAN (TO_DAYS('2008-01-01')),
-> PARTITION p03 VALUES LESS THAN (TO_DAYS('2009-01-01')),
-> PARTITION p04 VALUES LESS THAN (MAXVALUE));

> desc t2;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| dt | date | YES | | NULL | |
+-------+------+------+-----+---------+-------+ 

INSERT INTO t2 VALUES ('2007-02-02'),('2008-02-02'),('2009-02-02'),(CURDATE());
Query OK, 4 rows affected (0.04 sec)


[OK]を、今私たちは、パーティションから選択するだけでなく、そこから数えることができる.. 

> select count(*) from t2;
+----------+
| count(*) |
+----------+
| 4 |
+----------+ 

> explain partitions select count(*) from t2 \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t2
partitions: p01,p02,p03,p04
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 5
Extra: NULL

> SELECT * t2のパーティションから(P02);
+ ------------ +
| DT |
+ ------------ +
| 2007-02-02 |
+ ------------ +


> SELECT * t2のパーティションから(P04);
+ ------------ +
| DT |
+ ------------ +
| 2009-02-02 |
| 2013年5月15日|
+ ------------ +

> SELECT * t2のパーティションから(P02、P04);
+ ------------ +
| DT |
+ ------------ +
| 2007-02-02 |
| 2009-02-02 |
| 2013年5月15日|
+ ------------ +

T2 PARTITION(P04)から> SELECT COUNT(*);
+ ---------- +
| COUNT(*)|
+ ---------- +
| 2 |
+ ---------- +


この情報がお役に立てば幸いです。