mysql建立 分区_MySQL-mysql分区合理建立
MySQL從5.1.3開始支持Partition,MySQL支持RANGE,LIST,HASH,KEY分區類型,主要還是根據業務來選擇分區類型。
水平分區的幾種模式:
1、Range(范圍) — 這種模式允許DBA將數據劃分不同范圍。例如DBA可以將一個表通過年份劃分成三個分區,80年代(1980′s)的數據,90年代(1990′s)的數據以及任何在2000年(包括2000年)后的數據。
2、Hash(哈希) — 這中模式允許DBA通過對表的一個或多個列的Hash Key進行計算,最后通過這個Hash碼不同數值對應的數據區域進行分區。例如DBA可以建立一個對表主鍵進行分區的表。
3、Key(鍵值) — 上面Hash模式的一種延伸,這里的Hash Key是MySQL系統產生的。
4、List(預定義列表) — 這種模式允許系統通過DBA定義的列表的值所對應的行數據進行分割。例如:DBA建立了一個橫跨三個分區的表,分別根據2004年2005年和2006年值所對應的數據。
5、Composite(復合模式) — 是以上模式的組合使用。舉例:在初始化已經進行了Range范圍分區的表上,我們可以對其中一個分區再進行hash哈希分區。
垂直分區(按列分)
舉個簡單例子:一個包含了大text和BLOB列的表,這些text和BLOB列又不經常被訪問,這時候就要把這些不經常使用的text和BLOB了劃分到另一個分區,在保證它們數據相關性的同時還能提高訪問速度。
其中以RANGE最為常用,下面主要介紹下RANGE分區類型的用法:
mysql> SHOW VARIABLES LIKE '%partition%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| have_partitioning | YES |
+-------------------+-------+
1. RANGE類型
mysql> CREATE TABLE foo (
id INT NOT NULL AUTO_INCREMENT,
created DATETIME,
PRIMARY KEY(id, created)
) ENGINE=INNODB PARTITION BY RANGE (TO_DAYS(created))
(
PARTITION foo_1 VALUES LESS THAN (TO_DAYS('2009-01-01')),
PARTITION foo_2 VALUES LESS THAN (TO_DAYS('2010-01-01')),
PARTITION foo_3 VALUES LESS THAN (TO_DAYS('2011-01-01')),
PARTITION foo_4 VALUES LESS THAN (TO_DAYS('2012-01-01'))
)
mysql> INSERT INTO `foo` (`id`, `created`) VALUES
(1, '2008-01-02 00:00:00'),
(2, '2009-01-02 00:00:00'),
(3, '2010-01-02 00:00:00'),
(4, '2010-01-02 00:00:00'),
(5, '2011-01-02 00:00:00');
mysql> SELECT * FROM foo;
+----+---------------------+
| id | created |
+----+---------------------+
| 1 | 2008-01-02 00:00:00 |
| 2 | 2009-01-02 00:00:00 |
| 3 | 2010-01-02 00:00:00 |
| 4 | 2010-01-02 00:00:00 |
| 5 | 2011-01-02 00:00:00 |
+----+---------------------+
mysql> EXPLAIN PARTITIONS select * from foo where created>'2009-01-01 00:00:00' and created
+----+-------------+-------+-------------------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------------------+-------+---------------+---------+---------+------+------+--------------------------+
| 1 | SIMPLE | foo | foo_1,foo_2,foo_3 | index | NULL | PRIMARY | 12 | NULL | 4 | Using where; Using index |
+----+-------------+-------+-------------------+-------+---------------+---------+---------+------+------+--------------------------+
可以看到這條查詢只用了foo_1,foo_2,foo_3這三個分區,而不用去全表掃描,數據量越大查詢速度能得到明顯提高
總結
以上是生活随笔為你收集整理的mysql建立 分区_MySQL-mysql分区合理建立的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公共mysql数据库_公共MySQL的数
- 下一篇: pandas合并groupby_Pand