1. 程式人生 > >mysql分割槽技術實驗

mysql分割槽技術實驗

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

  首先登入mysql伺服器,使用show plugins來檢視是否支援分割槽技術

mysql> show plugins;
+------------+--------+----------------+---------+---------+
| Name       | Status | Type           | Library | License |
+------------+--------+----------------+---------+---------+
| binlog     | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
| partition  | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
| CSV        | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
| MEMORY     | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
| InnoDB     | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
| MyISAM     | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
| SPHINX     | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
+------------+--------+----------------+---------+---------+
8 rows in set (0.00 sec)

當我們看到partition選項的status屬性為active時,就說明資料庫是支援分割槽的。

下面建立一張表

create table t1(id int) egngine=myisam;

檢視mysql的資料檔案,在test資料夾下,我們可以看到有三個檔案,一個結構檔案,一個數據檔案,一個索引檔案



下面我們繼續建立一張t2表,並採用HSAH分割槽來進行建立

create table t2(
id int
)
engine=myisam
partition by hash(id)
partitions 4;

下面看一下test檔案下會發生什麼變化


test下除了t1表的三個檔案外,還多了t2表的10個檔案:.frm檔案是結構檔案,.par檔案說明是採用分割槽,其他的8個檔案則是分割槽產生的資料檔案和索引檔案。

上面我們看到了一般表和分割槽表的表結構的不同,下面我們再來看一下分割槽表查詢時的優勢所在。

  下面我們新建2張表,一張非分割槽表,一張分割槽表;

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

分割槽表:
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(1997),
    partition p1 values less than(1998),
    partition p2 values less than(1999),
    partition p3 values less than(2000),
    partition p4 values less than(2001),
    partition p5 values less than(2002),
    partition p6 values less than maxvalue
);
這裡我們分成了7個分割槽
下面往分割槽表中插入資料
delimiter $
create procedure load_data()
    begin
    declare v int default 0;
    while v<6000000
    do
        insert into part_tab
        values
        (v,"test partition",adddate('1995-01-01',(rand(v)*36520) mod 3652));
        set v=v+1;
    end while;
    end$
delimiter ;
call load_data();

這裡寫了一個儲存,往分割槽表中插入了600萬行資料進行測試

接著向no_part_tab插入同樣的資料

insert into no_part_tab select * from part_tab;

檢視一下表格,

mysql> select count(*) from part_tab;                 
+----------+
| count(*) |
+----------+
|  6000000 |
+----------+
1 row in set (0.13 sec)


mysql> select count(*) from no_part_tab;              
+----------+
| count(*) |
+----------+
|  6000000 |
+----------+
1 row in set (0.01 sec)

再來看下test資料夾下的資料檔案

下面我們來查詢一下這兩張表,做一下測試,現在,2張表都沒有加索引

先來查詢part_tab表

mysql> select count(*) from part_tab where c3 > date '1996-01-01' and c3 < date '1996-12-31';
+----------+
| count(*) |
+----------+
|   598029 |
+----------+
1 row in set (0.66 sec)

下面是no_part_tab表

mysql> select count(*) from no_part_tab where c3 > date '1996-01-01' and c3 < date '1996-12-31';
+----------+
| count(*) |
+----------+
|   598029 |
+----------+
1 row in set (5.62 sec)

我們能夠明顯的發現,2次查詢的差距還是比較大的,下面,我們來解析一下這兩條sql


通過desc我們可以知道兩者查詢差距的原因,那麼為什麼查詢分割槽表的時候搜尋的行數少呢,那是因為我們的1997-01-01到1991-12-12的資料就儲存在p0分割槽內,所以只要搜尋p0分割槽即可,大大減少了搜尋所需的時間

下面我們為2張表新增索引

alter table part_tab add index in_c3(c3);
alter table no_part_tab add index in_c3(c3);

建立索引的時間較長,下面我們繼續進行上面的操作,看看現在查詢的結果是什麼



mysql> select count(*) from part_tab where c3 > date '1996-01-01' and c3 < date '1996-12-31';         
+----------+
| count(*) |
+----------+
|   598029 |
+----------+
1 row in set (1.02 sec)
下面是no_part_tab表
mysql> select count(*) from no_part_tab where c3 > date '1996-01-01' and c3 < date '1996-12-31';      
+----------+
| count(*) |
+----------+
|   598029 |
+----------+
1 row in set (0.98 sec)

我們發現2者是相差無幾的,甚至未分割槽表還要快一點,這是又是分割槽表的索引是分表建立的,有7個分割槽就有7個索引檔案,所以查詢的時候就會比查詢一個索引檔案的要慢一點

下面我們用desc來檢視一下


我們可以發現,未分割槽表的查詢rows要略少於分割槽表的rows,這也是未分割槽表略快的原因

下面我們增加一個未索引欄位來查詢

mysql> select count(*) from part_tab where c3 > date '1996-01-01' and c3 < date '1996-12-31' and c2="he
llo";
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.61 sec)


mysql> select count(*) from no_part_tab where c3 > date '1996-01-01' and c3 < date '1996-12-31' and c2="hello";
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (4.94 sec)

我們發現未分割槽表的查詢速度明顯慢了,這是由於part_tab只查詢的60多行,而no_part_tab查詢了600萬行,差距是明顯的

這樣我們的mysql分割槽實驗就完成了

相關推薦

mysql分割槽技術實驗

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

Mysql分割槽技術

4種分割槽型別: 1.RANGE分割槽:基於屬於一個給定連續區間的列值,把多行分配給分割槽(即一個表中的id1-20,使用rang分割槽分為4個表,即id1-5為表1,6-10為表2,以此類推) 2.LIST分割槽:類似於按RANGE分割槽,區別在於LIST分割槽是基於列值

MySQL分表技術&分割槽技術

一、分表技術 1、說明 說明:當一張表資料巨大時,不管如何優化,查詢也會相當慢 解決:1-增加查詢快取,2-使用分表技術 2、實現分表的方法 水平分表:手動建立多張表,通過PHP演算法判斷實現讀寫 垂直分表:將表字段拆分到其他表中 3、水平分表 水平分表圖示:

Mysql分割槽實驗

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

Mysql技術要點

多條 掃描 blog http 返回 類型 同時 pri 計數 MyISAM和InnoDB的區別 MySQL默認采用的是MyISAM。 MyISAM不支持事務,而InnoDB支持。InnoDB的AUTOCOMMIT默認是打開的,即每條SQL語句會默認被封裝成一個事務,自動提

mysql 主從同步實驗細解

mysql master slavemysql 主從同步實驗細解一.實驗環境實驗環境 192.168.9.108 為master 192.168.9.109 為slave數據庫版本:version 5.1.73安裝方式:采用的yum 安裝 源為163的源系

網絡對抗技術實驗報告一

搜索 net log 教師 犯罪嫌疑人 搜索引擎 目標 局域網 圖形 學 號:201421410031 中國人民公安大學 Chinese people’ public security university 網絡對抗技術 實驗報告 實驗一 網絡偵

信息安全技術 實驗四 木馬及遠程控制技術

遠程監控 編寫 虛擬機 協議分析 文檔 一個 地址 inter tps 信息安全技術 實驗四 木馬及遠程控制技術 實 驗 報 告 實驗名稱: 木馬及遠程控制技術 姓名: 楊瀚、李卓雯 學號: 20155313、20155201 班級: 1553、1552 日期: 201

信息安全技術 實驗五 網絡攻防技術 20155202 張旭

mach 無法連接 風險 scan 自己 操作系統 指紋 c盤 運行 信息安全技術 實驗五 網絡攻防技術 20155202 練習一 信息收集 一、 實驗目的 該實驗為驗證性實驗。 ? 了解信息搜集的一般步驟 ? 學會熟練使用ping命令 ? 學會利用Nmap等工具進行信息

20155220 網絡攻防技術 實驗三 免殺原理與實踐

基於 back 網絡攻防 lis 方法 由於 原理 使用 生成可執行文件 網絡攻防技術 實驗三 免殺原理與實踐 使用msf生成後門程序的檢測 首先我們對上次實驗生成的後門exe,利用VirSCAN進行檢測 然後我們利用msfvenom -p java/meterp

20155201 網絡攻防技術 實驗五 MSF基礎應用

HR creat 5.5 frame CP 控制臺 基礎 ado 解釋 20155201 網絡攻防技術 實驗五 MSF基礎應用 一、實踐內容 一個主動攻擊實踐,如ms08_067 一個針對瀏覽器的攻擊,如ms11_050 一個針對客戶端的攻擊,如Adobe 成功應用任何一

20155201 網絡攻防技術 實驗八 Web基礎

修改密碼 註釋符 括號 命令註入 pda sql IT 攻防 哪裏 20155201 網絡攻防技術 實驗八 Web基礎 一、實踐內容 Web前端HTML,能正常安裝、啟停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。 Web前

20155201 網絡攻防技術 實驗九 Web安全基礎

cookie信息 。。 區分 基礎問題 永久 信息管理 註入攻擊 偽造 res 20155201 網絡攻防技術 實驗九 Web安全基礎 一、實踐內容 本實踐的目標理解常用網絡攻擊技術的基本原理。Webgoat實踐下相關實驗。 二、報告內容: 1. 基礎問題回答 1)SQ

交換技術實驗

ges type dot 輸入 int pool interface 紅色 頁面 實驗環境的準備:cisco packet student;3560三層交換機;2800系列的路由器. 實驗步驟: 先配置路由器的單臂路由,接著配置四個dhcp地址池interface F

mysql系列詳解四:mysql事務-技術流ken

orm value 進行 show _for 就是 原子 div str MySQL 事務 MySQL 事務主要用於處理操作量大,復雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數

網路對抗技術實驗

Chinese people’ public security university   網路對抗技術 實驗報告   實驗四 惡意程式碼技術      

中國人民公安大學 網路對抗技術實驗報告一

中國人民公安大學 Chinese people’ public security university   網路對抗技術 實驗報告   實驗一 網路偵查與網路掃描    

網路對抗技術 實驗六 綜合滲透 學號

學號 201521460025     中國人民公安大學 Chinese people' public security university     網路對抗技術 實驗報告    

201521450014 網路對抗技術實驗四 葛文宣

中國人民公安大學 Chinese people’ public security university   網路對抗技術 實驗報告   實驗四 惡意程式碼技術    

201521450014 網路對抗技術實驗五 葛文宣

中國人民公安大學 Chinese people’ public security university   網路對抗技術 實驗報告   實驗五 綜合滲透     &nb