1. 程式人生 > >通過分割槽(Partition)提升MySQL效能

通過分割槽(Partition)提升MySQL效能

什麼是資料庫分割槽?

雖然分割槽技術可以實現很多效果,但其主要目的是為了在特定的SQL操作中減少資料讀寫的總量以縮減響應時間

分割槽主要有兩種形式:

1.水平分割槽(Horizontal Partitioning)這種形式分割槽是對表的行進行分割槽,通過這樣的方式不同分組裡面的物理列分割的資料集得以組合,從而進行個體分割(單分割槽)或集體分割(1個或多個分割槽)。所有在表中定義的列在每個資料集中都能找到,所以表的特性依然得以保持。

舉個簡單例子:一個包含十年發票記錄的表可以被分割槽為十個不同的分割槽,每個分割槽包含的是其中一年的記錄。(這裡具體使用的分割槽方式我們後面再說,可以先說一點,一定要通過某個屬性列來分割,譬如這裡使用的列就是年份

2.垂直分割槽(Vertical Partitioning) 這種分割槽方式一般來說是通過對表的垂直劃分來減少目標表的寬度,使某些特定的列被劃分到特定的分割槽,每個分割槽都包含了其中的列所對應的行。

舉個簡單例子:一個包含了大text和BLOB列的表,這些text和BLOB列又不經常被訪問,這時候就要把這些不經常使用的text和BLOB了劃分到另一個分割槽,在保證它們資料相關性的同時還能提高訪問速度。

如何進行實際分割槽:

看看分割槽的實際效果吧。我們建立幾個同樣的MyISAM引擎的表,包含日期敏感的資料,但只對其中一個分割槽。分割槽的表(表名為part_tab)我們採用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.00 sec)

通過上面的知識,經過實驗,我們有了如下結論:

初步結論:

1.分割槽和未分割槽佔用檔案空間大致相同 (資料和索引檔案)
2.如果查詢語句中有未建立索引欄位,分割槽時間遠遠優於未分割槽時間
3.如果查詢語句中欄位建立了索引,分割槽和未分割槽的差別縮小,分割槽略優於未分割槽

最終結論:

1.對於大資料量,建議使用分割槽功能
2.去除不必要的欄位
3.根據手冊, 增加 myisam_max_sort_file_size 會增加分割槽效能

–end

相關推薦

通過分割槽Partition提升MySQL效能

什麼是資料庫分割槽? 雖然分割槽技術可以實現很多效果,但其主要目的是為了在特定的SQL操作中減少資料讀寫的總量以縮減響應時間。 分割槽主要有兩種形式: 1.水平分割槽(Horizontal Partitioning)這種形式分割槽是對表的行進行分割槽,

MySQL分割槽partition相關概念

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

Hive 分割槽Partition

Hive 分割槽(Partition) 一、背景 1、在Hive Select查詢中一般會掃描整個表內容,會消耗很多時間做沒必要的工作。有時候只需要掃描表中關心的一部分資料,因此建表時引入了partition概念。

MySQL詳解MySQL效能監控

MySQL效能監控 1.基本監控系統方法 在Linux作業系統中,使用者可以使用一些分析系統性能的命令去分析資料庫伺服器效能。 1.ps命令 ps命令主要用來獲取對於某個程序的一些資訊。 2.top命令 top命令是Linux系統下最常用的效能分析工具,能夠實時的

kafka分割槽partition和和分組group

下面是自己在使用過程中的總結。歡迎拍磚每個consumer只能消費指定的幾個分割槽。那麼訊息如果沒有發到監聽的分割槽,那麼那個消費者就不能獲取到這次傳送的訊息。下面的例子一定要注意對分割槽和分組的理解,不然會不知道為什麼會得出那樣的結論消費組中的消費者會怎麼取kafka的資料

hive分割槽partition簡介

一、背景 1、在Hive Select查詢中一般會掃描整個表內容,會消耗很多時間做沒必要的工作。有時候只需要掃描表中關心的一部分資料,因此建表時引入了partition概念。 2、分割槽表指的是在建立表時指定的partition的分割槽空間。 3、如果需要建立有分割

轉載對比MySQL中int、char 以及 varchar 的效能

轉載:https://www.jb51.net/article/148819.htm 網路上有許多似是而非的“謠言”,當然都不是惡意,絕大部分都是開發者不願意自己主動研究,反而輕信其他人的信口之言。 關於資料庫的謠言也有不少,比如“int效能比char高很多”。 我最近針對int

mysql效能調優——查詢mysql程序狀態

除了可以檢視資料庫狀態,還可以觀察mysql程序狀態 用show processlist 或者開啟慢查詢,獲取有問題的sql(而用profiling以及explain分析sql語句我們暫時以後再說) mysql -uroot -e 'show processlist' 看資料庫狀

MySQL分表Partition學習研究報告

最近在開發一個新的專案,可能會產生大資料量,需要對部分表進行分表操作,故來研究學習MySQL的分表功能。 由於實驗報告已經寫成Exlce檔案了,各位看過就直接下載吧:MySQL分表分析報告.xls 以下是此次實驗的結論: Insert時,分表和不分表的效能所差無幾; 大量資料Insert時,大量資

MySQL分割槽3雜湊分割槽-hash

  雜湊分割槽。雜湊分割槽主要是依據表的某個欄位以及指定分割槽的數量。 建立表分割槽    要使用HASH分割槽來分割一個表,要在CREATE TABLE 語句上新增一個“PARTITION BY HASH (expr)”子句,其中“expr”是一個返回一個整數的表示式。它

CentOS7 +vsftpd+mysql MySql 虛用戶模式

create status success start -m figure sys conf wrapper CentOS7 +vsftpd+mysql (三)之 MySql 虛用戶模式 上篇中通過文本文件用戶列表方式對FTP用戶進行用戶管理很不方便,接下來我們用上數據庫存

tcpdump 學習3MySQL Query

說明 server gen rollback 命令 復雜 pro 關於 col 在MySQL線上環境我們一般只打開了binary log,slow log,有時我們需要查看general log呢?因為該log記錄所有的請求,打開該日誌肯定給磁盤造成很大壓力,IO能力有所下

MySQL十三MySQL事務

發出 最簡 -i 更改 讀取數據 兩種方法 mysql ont 之間 前言   這段時間自己會把之前學的東西都總結一遍,希望對自己以後的工作中有幫助。其實現在每天的狀態都是很累的,但是我要堅持!   進入我們今天的正題:   為什麽MySQL要 有事務呢?事務到底是用

Corosync+pacemaker+DRBD+mysqlmariadb實現高可用hamysql集群centos7

corosync+pacemaker+drbd+mysql(mariadb)實現高可用(ha)的mysql集群(centos7)Corosync+pacemaker+DRBD+mysql(mariadb)實現高可用(ha)的mysql集群(centos7)目錄:介紹環境借助pcs安裝與配置corosync和p

運維學python之爬蟲中級篇Python3 MySQL 數據庫連接

結束 學python ofo 如何 res 2.7 獲取數據 執行 mail 最近因為年底,連續兩個項目要投產上線,又趕上公司年會,忙的要死,更新有些慢,見諒。今天要說一說python如何對mysql進行操作。在 Python3.x 版本中用於連接 MySQL 服務器的庫與

Ubuntu 16.04通過NetworkManagerGUI配置網橋

6.0 .html gui bubuko 網橋 log 文章 分享圖片 des 說明:配置好網橋之後一定要重啟,不然不生效。這個是Desktop版GUI設置的問題。Server版不會。 配置: 參考: http://www

centos-7yum安裝mairadb實現mysql多實例

mysql步驟:1、安裝mariadb-server包yum mariadb-server2、建一個主文件夾三個副文件夾,三個副文件夾用來分別存放三個實力 註意:盡量把這個多實例放在邏輯卷中比較好一點a、mkdir /mysqldb/{3306,3307,3308}/{etc,data,pid,soc

Linux運維常見基礎面試練習題4- 提升

Linux運維 Linux學習 Linux入門 Linux基礎 Linux運維常見基礎面試練習題(4)- 提升1 (ZZ)命令是在vi編輯器中執行存盤退出 A :q B ZZ C :q! D :WQ 2 用虛擬機安裝了一臺Linux系統,突然想克隆一臺服務器,克隆後發現無法上網

Nodejs學習筆記—與MySQL交互felixge/node-mysql

ted iss eid 所在 err password soc deb 大連 簡介和安裝   Node.js與MySQL交互操作有很多庫,具體可以在 https://www.npmjs.org/search?q=mysql 查看。   我選擇了felixge/node-m

開源監控解決方案:ICINGANagios監控MYSQL Database

mod eal base perl nagios ket select nodes sla [root@nagios ~]# tar zxvf DBI-1.637.tar.gz [root@nagios ~]# cd DBI-1.637 [root@nagios DBI-1