posts - 495,comments - 227,trackbacks - 0
          http://www.0773linji.com/web/mysql_partitions.html

          【MySQL使用分區表的好處】
          1.可以把一些歸類的數據放在一個分區中,可以減少服務器檢查數據的數量加快查詢。
          2.方便維護,通過刪除分區來刪除老的數據。
          3.分區數據可以被分布到不同的物理位置,可以做分布式有效利用多個硬盤驅動器。

          【MySQL可以建立四種分區類型的分區】
          RANGE 分區:基于屬于一個給定連續區間的列值,把多行分配給分區。
          LIST 分區:類似于按RANGE分區,區別在于LIST分區是基于列值匹配一個離散值集合中的某個值來進行選擇。
          HASH分區:基于用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。這個函數可以包含MySQL 中有效的、產生非負整數值的任何表達式。
          KEY 分區:類似于按HASH分區,區別在于KEY分區只支持計算一列或多列,且MySQL 服務器提供其自身的哈希函數。必須有一列或多列包含整數值。
          一般用得多的是range分區和list分區。


          【查看是否支持分區】

          show variables like "%part%";

          【如何查看mysql分區信息】

          select * from INFORMATION_SCHEMA.PARTITIONS where table_name='user'; (這里查看user表的分區信息)

          【查看執行一條查詢SQL會掃描的分區】

          explain partitions select * from user where id=10;

          【如何創建分區】
          1.建表時就分區:

          CREATE TABLE IF NOT EXISTS `user` ( 
             `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID', 
             `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名稱', 
             `sex` int(1) NOT NULL DEFAULT '0' COMMENT '0為男,1為女', 
             PRIMARY KEY (`id`) 
          ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 
          PARTITION BY RANGE (id) ( 
               PARTITION p0 VALUES LESS THAN (3), 
               PARTITION p1 VALUES LESS THAN (6), 
               PARTITION p2 VALUES LESS THAN (9), 
               PARTITION p3 VALUES LESS THAN (12), 
               PARTITION p4 VALUES LESS THAN MAXVALUE 
          );

          2.對現有表進行分區:可以對現有表進行分區,并且會按規則自動的將表中的數據分配相應的分區中

          alter table 表名 partition by RANGE(字段) 
          (PARTITION p1 VALUES less than (1), 
          PARTITION p2 VALUES less than (5), 
          PARTITION p3 VALUES less than MAXVALUE);

          【刪除一個分區】
          (當刪除了一個分區,也同時刪除了該分區中所有的數據)
          ALTER TABLE 表名 DROP PARTITION p2;

          【分區合并】
          下面的SQL,將p201001 - p201009 合并為3個分區p2010Q1 - p2010Q3

          ALTER TABLE sale_data
              REORGANIZE PARTITION p201001,p201002,p201003,
           
              p201004,p201005,p201006,
           
              p201007,p201008,p201009 INTO
           
              (
           
              PARTITION p2010Q1 VALUES LESS THAN (201004),
           
              PARTITION p2010Q2 VALUES LESS THAN (201007),
           
              PARTITION p2010Q3 VALUES LESS THAN (201010)
           
             );

          【分區的拆分】
          下面的SQL,將p2010Q1 分區,拆分為s2009 與s2010 兩個分區

          ALTER TABLE sale_data REORGANIZE PARTITION p2010Q1 INTO (
           
             PARTITION s2009 VALUES LESS THAN (201001),
                      
              PARTITION s2010 VALUES LESS THAN (201004)
           
             );

          【分區索引的局限】
          1.所有分區都要使用同樣的引擎。
          2.分區表的每一個唯一索引必須包含由分區函數引用的列。
          3.mysql能避免查詢所有的分區,但仍然鎖定了所有分區。
          4.分區函數能使用的函數和表達式有限,例如函數有上面的4種。
          5.分區不支持外鍵。
          6.不能使用LOAD INDEX INTO CACHE
          7.分區并不能總是改善性能,要進行性能評測。

          posted on 2013-02-22 17:43 SIMONE 閱讀(924) 評論(0)  編輯  收藏 所屬分類: mysql
          主站蜘蛛池模板: 娱乐| 莎车县| 六安市| 南木林县| 贵阳市| 武隆县| 孝感市| 察隅县| 永清县| 四子王旗| 美姑县| 古蔺县| 兴山县| 郁南县| 肥乡县| 肥东县| 仙居县| 曲周县| 德江县| 华容县| 靖安县| 盖州市| 麻栗坡县| 资兴市| 镇赉县| 堆龙德庆县| 榆林市| 新昌县| 门源| 会理县| 高碑店市| 永修县| 潮州市| 阳曲县| 鄂托克前旗| 汉川市| 海口市| 兴山县| 彭泽县| 嘉鱼县| 上犹县|