日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql建立 分区_MySQL-mysql分区合理建立

發布時間:2023/12/15 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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分区合理建立的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。