1. 程式人生 > >Mysql分割槽實驗

Mysql分割槽實驗

不同分割槽技術的對比
range    適合與日期型別,支援複合分割槽, 有限的分割槽 ,一般只針對某一列
list     適合與有固定取值的列,支援複合分割槽   ,有限的分割槽,插入記錄在這一列的值不值list中,則資料丟失,一般只針對某一列
Hash 線性Hash的資料分佈不均勻,而一般Hash的資料分佈較均勻 ,一般只針對某一列
key,列可以為字元型等其他非int型別,效率較之前的低,因為函式為複雜的函式(如md5或SHA函式),
     一般只針對某一列


show engines;
show plugins;
create table t1(id int);
show create table t1;


mysql> create table t2( id int )  engine=myisam partition by hash(id) partitions 5;
mysql> show create table t2;
[
[email protected]
test]# ls -l
total 52
-rw-rw---- 1 mysql mysql 8556 Jul  2 09:58 t1.frm
-rw-rw---- 1 mysql mysql    0 Jul  2 09:58 t1.MYD
-rw-rw---- 1 mysql mysql 1024 Jul  2 09:58 t1.MYI
-rw-rw---- 1 mysql mysql 8556 Jul  2 10:15 t2.frm
-rw-rw---- 1 mysql mysql   40 Jul  2 10:15 t2.par
-rw-rw---- 1 mysql mysql    0 Jul  2 10:15 t2#P#p0.MYD
-rw-rw---- 1 mysql mysql 1024 Jul  2 10:15 t2#P#p0.MYI
-rw-rw---- 1 mysql mysql    0 Jul  2 10:15 t2#P#p1.MYD
-rw-rw---- 1 mysql mysql 1024 Jul  2 10:15 t2#P#p1.MYI
-rw-rw---- 1 mysql mysql    0 Jul  2 10:15 t2#P#p2.MYD
-rw-rw---- 1 mysql mysql 1024 Jul  2 10:15 t2#P#p2.MYI
-rw-rw---- 1 mysql mysql    0 Jul  2 10:15 t2#P#p3.MYD
-rw-rw---- 1 mysql mysql 1024 Jul  2 10:15 t2#P#p3.MYI
-rw-rw---- 1 mysql mysql    0 Jul  2 10:15 t2#P#p4.MYD
-rw-rw---- 1 mysql mysql 1024 Jul  2 10:15 t2#P#p4.MYI


往t2表裡插入1000萬行資料
insert into t2 select * from t2;


ll -h
watch -n1 ls -lh  時時監控
total 7.6M
-rw-rw---- 1 mysql mysql 8.4K Jul  3 06:58 t2.frm
-rw-rw---- 1 mysql mysql   40 Jul  3 06:58 t2.par
-rw-rw---- 1 mysql mysql 448K Jul  3 07:09 t2#P#p0.MYD
-rw-rw---- 1 mysql mysql 1.1M Jul  3 07:09 t2#P#p0.MYI
-rw-rw---- 1 mysql mysql 448K Jul  3 07:09 t2#P#p1.MYD
-rw-rw---- 1 mysql mysql 1.1M Jul  3 07:09 t2#P#p1.MYI
-rw-rw---- 1 mysql mysql 448K Jul  3 07:09 t2#P#p2.MYD
-rw-rw---- 1 mysql mysql 1.1M Jul  3 07:09 t2#P#p2.MYI
-rw-rw---- 1 mysql mysql 448K Jul  3 07:09 t2#P#p3.MYD
-rw-rw---- 1 mysql mysql 1.1M Jul  3 07:09 t2#P#p3.MYI
-rw-rw---- 1 mysql mysql 448K Jul  3 07:09 t2#P#p4.MYD
-rw-rw---- 1 mysql mysql 1.1M Jul  3 07:09 t2#P#p4.MYI


myisam表引擎增刪改查是非常快的 比innodb錶快
myisam寧可犧牲掉資料庫裡其他的功能,也要為增刪改查提速,這是myisam最大的優勢


top 命令檢視cpu的使用使用情況


free -m檢視記憶體的使用情況




一千萬行的記錄表t2  id為主鍵
select count(*) from t2   //檢視速度是很快的,因為mysql早就對這些資料做了優化
select count(*) from t2 where id>5 //這個的查詢速度是很慢的
select count(id) from t2;//這行的速度也比較慢


t2表只有id欄位 一千萬行的資料 總大小大約為 241M


改變語句終結符
mysql>\d //
建立儲存過程 
mysql> create procedure p3()
    -> begin
    -> set @i=1;
    -> while @i<10000 do
    -> insert into t3 values(@i);
    -> set @
[email protected]
+1;
    -> end while;
    -> end //
Query OK, 0 rows affected (0.00 sec)


mysql> select count(*) from t3;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)


mysql> call p3() //
Query OK, 0 rows affected (0.91 sec)


mysql>show procedure status;
mysql>show create procedure p3;


mysql>drop procedure p3;




range分割槽
mysql> create table part_tab (c1 int default null,c2 varchar(30) default null,c3 date default null) engine=myisam
    -> partition by range(year(c3))(
    -> partition p0 values less than(1995),
    -> partition p1 values less than(1996),
    -> partition p2 values less than(1997),
    -> partition p3 values less than(1998),
    -> partition p4 values less than(1999),
    -> partition p5 values less than(2000),
    -> partition p6 values less than(2001),
    -> partition p7 values less than(2002),
    -> partition p8 values less than(2003),
    -> partition p9 values less than(2004),
    -> partition p10 values less than(2010),
    -> partition p11 values less than maxvalue);
Query OK, 0 rows affected (0.13 sec)


mysql> create table no_part_tab (c1 int(11) default null,c2 varchar(30) default null,c3 date default null) engine=myisam;




mysql>\d //
mysql> create procedure load_part_tab()
    -> begin
    -> declare v int default 0;
    -> while v<8000000
    -> do
    -> insert into par_tab
    -> values(v,'testing partitions',adddate('1995-01-01',(rand(v)*36520) mod 36520));
    -> set v = v + 1;
    -> end while;
    -> end
    -> //


mysql>show procedure status;
mysql>call load_part_tab();




[
[email protected]
test]# watch -n1 ls -lh
[[email protected] ~]# free -m
[[email protected] ~]#top
Cpu(s): 60.6%us


mysql> select count(*) from par_tab;
mysql>insert into no_part_tab select * from part_tab;  //insert into ... select ... 這樣的語句比單行插入的要快


mysql>select count(*) from part_tab where c3 > date '1995-01-01' and c3 < date '1995-12-31'  耗時1.95s
mysql>select count(*) from no_part_tab where c3 > date '1995-01-01' and c3 < date '1995-12-31' 耗時8.74s
mysql> desc select count(*) from par_tab where c3 > date '1995-01-01' and c3 < date '1995-12-31' \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: par_tab
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 25084
        Extra: Using where
1 row in set (0.00 sec)
mysql> explain select count(*) from par_tab where c3 > date '1995-01-01' and c3 < date '1995-12-31' \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: par_tab
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 25084
        Extra: Using where
1 row in set (0.00 sec)


innodb表資料結構
對innodb的資料表結構,首先要解決兩個概念性的問題:共享表空間及獨佔表空間
什麼是共享表空間和獨佔表空間
共享表空間及獨佔表空間都是針對資料的儲存方而言的。
共享表空間:某一個數據庫的所有的表資料,索引檔案全部放在一個檔案中,預設
這個共享表空間的檔案路徑在data目錄下,預設的檔名為ibdata1 初始化為10M


注:目前測試發現不同的資料庫下,索引資料和表資料都儲存在了一個檔案ibdata1檔案裡面
-rw-rw---- 1 mysql mysql 8.4K Jul  4 07:23 t3.frm
-rw-rw---- 1 mysql mysql 8.4K Jul  4 07:23 t4.frm


[[email protected] test]# ls -lh ../ibdata1 
-rw-rw---- 1 mysql mysql 26M Jul  4 08:13 ../ibdata1


獨佔表空間:每一個表都將會生成以獨立的檔案方式來進行儲存,每一個表都有一個.frm
表描述檔案,還有一個.idb檔案。其中這個檔案包括了單獨一個表的資料內容以及索引內容,
預設情況下它的儲存位置也是在表的位置之中


innodb_file_per_table=1    是否使用共享目錄及獨佔目錄 1表示獨佔表空間


開啟獨佔空間
[[email protected] test]# ls -lh
-rw-rw---- 1 mysql mysql 8.4K Jul  4 08:13 t5.frm
-rw-rw---- 1 mysql mysql  96K Jul  4 08:13 t5.ibd
-rw-rw---- 1 mysql mysql 8.4K Jul  4 08:13 t6.frm
-rw-rw---- 1 mysql mysql  96K Jul  4 08:13 t6.ibd


只有獨佔表空間才能實現分割槽技術




mysql> create table t7(
    -> id int)
    -> engine=innodb
    -> partition by hash(id)
    -> partitions 5;
Query OK, 0 rows affected (0.84 sec)


mysql> show create table t7;
+-------+-----------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                |
+-------+-----------------------------------------------------------------------------------------------------------------------------+
| t7    | CREATE TABLE `t7` (
  `id` int(11) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY HASH (id) PARTITIONS 5  |
+-------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
[[email protected] test]# ls -lh
-rw-rw---- 1 mysql mysql 8.4K Jul  4 08:21 t7.frm
-rw-rw---- 1 mysql mysql   40 Jul  4 08:21 t7.par
-rw-rw---- 1 mysql mysql  96K Jul  4 08:22 t7#P#p0.ibd
-rw-rw---- 1 mysql mysql  96K Jul  4 08:22 t7#P#p1.ibd
-rw-rw---- 1 mysql mysql  96K Jul  4 08:22 t7#P#p2.ibd
-rw-rw---- 1 mysql mysql  96K Jul  4 08:22 t7#P#p3.ibd

相關推薦

Mysql分割槽實驗

不同分割槽技術的對比 range    適合與日期型別,支援複合分割槽, 有限的分割槽 ,一般只針對某一列 list     適合與有固定取值的列,支援複合分割槽   ,有限的分割槽,插入記錄在這一列的值不值list中,則資料丟失,一般只針對某一列 Hash 線性Hash的

mysql分割槽技術實驗

  關於mysql的分割槽理論這裡不做過多解釋,下面來實際操作,由於mysql的分割槽技術是從mysql5.1以後才出現的,所以要保證mysql的版本要在5.1以上,這裡我使用的是mysql5.1.60版本,作業系統是linux系統。   首先登入mysql伺服器,使用sh

Vsftpd使用MySQL驗證實驗

vsftpd使用mysql驗證實驗成功!!!!Vsftpd使用mysql驗證實驗筆記實驗環境主機IP作用mysql.xruan.com192.168.0.11用於存儲vsftpd虛擬用戶信息vsftp.xruan.com192.168.0.12提供ftp服務實驗步驟:第1步:安裝vsftpd並測試可用性(在v

MySQL-MMM高可用群集(本篇使用MariaDB代替MySQL進行實驗部署)

可用 個數 兩個 切換 p地址 default 編輯 主主 ins 1.MySQL-MMM概述 MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM使用Perl語言開發,主要用

2.ORACLE分割槽表遷移MySQL分割槽

介紹 由於MySQL沒有類似於ORACLE間隔分割槽類似的功能,所以遷移分割槽表的時候工作量較大,下面就把常用到的一些工具指令碼及操作過程列在下面。 操作 1 修改分割槽表定義 ORACLE增加了間隔分割槽功能,可以在資料插入的時候自動新增分割槽,但是MySQL就不具備這個功

網際網路公司為啥不使用mysql分割槽表?

解決什麼問題? 回答:當mysql單表的資料庫過大時,資料庫的訪問速度會下降,“資料量大”問題的常見解決方案是“水平切分”。   mysql常見的水平切分方式有哪些? 回答:分庫分表,分割槽表   什麼是mysql的分庫分表? 回答:把一個很大的庫(表

MySQL資料庫實驗:任務一 建立資料庫和表

目錄 任務一 建立資料庫和表 【實訓目的與要求】 【實訓原理】 【實訓步驟】 一、熟悉MySQL環境 二、利用MySQL命令列視窗建立資料庫及表 三、利用介面工具建立資料庫及表 任務一 建立資料庫和表

MySQL資料庫實驗:任務二 表資料的插入、修改及刪除

目錄 任務二 表資料的插入、修改及刪除 一、利用介面工具插入資料 二、資料更新 (一)利用MySQL命令列視窗更新資料 (二)利用Navicat for MySQL客戶端工具更新資料 三、資料庫的備份與還原

mysql ---分割槽管理與維護

mysql 分割槽管理 為沒有分割槽的表建立分割槽 alter table user_1 partition by range(age)( partition age_1 values less than (20), partition age_2 values less than (30)

mysql 分割槽--list分割槽

list 分割槽 根據具體數值分割槽,每個分割槽數值不重疊,使用PARTITION BY LIST、VALUES IN關鍵字。跟Range分割槽類似,不使用COLUMNS關鍵字時List括號內必須為整數字段名或返回確定整數的函式。 區別在於LIST分割槽是基於列值匹配一個離散值集合中的某個值

mysql 分割槽表 range分割槽

首先呢我們來看下怎麼建立一個分割槽表 在上節課的時候 我們也說過 在分割槽的時候 如果分割槽欄位中有主鍵或者唯一索引的列,那麼多有主鍵列和唯一索引列都必須包含進來。 1 ,按照年齡的範圍 create table staff_r12( id int not null auto_inc

mysql分割槽rangelisthashkey

uip10主動斷開問題而紫韻兒則飛快的給凌雪拉回氣血凌雪自己也猛灌紅藥水這才堪堪的將氣血拉回來但是BOSS要是再次使用黑龍波的話恐怕凌雪就完全扛不住了uip10主動斷開問題而紫韻兒則飛快的給凌雪拉回氣血凌雪自己也猛灌紅藥

MySQL分割槽(partition)相關概念

資料分割槽: mysql 資料庫中的資料是以檔案的形式儲存在磁碟上,預設放在/mysql/data下面 show variables like 'datadir'; 一張表主要對應三個檔案,1)frm存放表結構,2)myd存放表資料,3)myi存放表索引。 如果一張表的

mysql分割槽

mysql資料庫中的資料是以檔案的形勢存在磁碟上的,預設放在/mysql/data下面(可以通過my.cnf中的datadir來檢視), 一張表主要對應著三個檔案, 一個是frm存放表結構的, 一個是myd存放表資料的, 一個是myi存表索引的。 如果一張表的資料量

17.Mysql分割槽

17.Mysql分割槽分割槽是指根據一定的規則把一個表分解成多個部分,邏輯上仍是一張表,實際上由多個物理分割槽物件組成。分割槽對於應用是完全透明的,不影響業務邏輯和SQL編寫。分割槽的優點: 可以儲存更多的資料; 優化查詢;當where條件包含分割槽鍵時只在特定的分割槽查詢;當涉及聚合函式時每個分割槽可以並行

史上最簡單 MySQL 分割槽

一、什麼是表分割槽: 通俗地講表分割槽是將一大表,根據條件分割成若干個小表。 mysql5.1開始支援資料表分割槽了。 二、為什麼要對錶進行分割槽: 為了改善大型表以及具有各種訪問模式的表的可伸縮性,可管理性和提高資料庫效率。 三、分割槽的優點: 1、單個磁

MySQL 分割槽分庫分表簡介

1.Mysql分割槽:     (1) 是什麼:如一張表的資料量太大,那麼myd,myi就會變的很大,查詢資料就會變的很慢,這個時候我們可以利用mysql的分割槽功能,在物理上將這一張表對應的三個檔案,分割成許多個小塊,這樣呢,我們查詢一條資料時,就不用全部查找了,只要知道這條資料在哪一塊,然後在那一塊找就

mysql分割槽方案的研究

 筆者覺得,分庫分表確實好的。但是,動不動搞分庫分表,太麻煩了。分庫分表雖然是提高資料庫效能的常規辦法,但是太麻煩了。所以,嘗試研究mysql的分割槽到底如何。  之前寫過一篇文章,http://www.cnblogs.com/wangtao_20/p/7115962.html 討論過訂單表的分庫分表,

MySQL 分割槽建索引

介紹 mysql分割槽後每個分割槽成了獨立的檔案,雖然從邏輯上還是一張表其實已經分成了多張獨立的表,從“information_schema.INNODB_SYS_TABLES”系統表可以看到每個分割槽都存在獨立的TABLE_ID,由於Innodb資料和索引都是儲存在".ibd"檔案當中(從INNODB

MYSQL資料庫實驗(使用者與許可權管理)

實驗: 資料庫安全性實驗 一、實驗目的 建立表和使用者管理 建立表單是資料庫中最基本的操作,也是使用比較頻繁的操作,因此必須掌握SQL的(CREATE語句)的使用方法。而對於使用者的管理操作更是一名合格的DBA所必須掌握的.本實驗就要求掌握並熟悉這兩項基本技能. 使