目錄
二、分区的类型
三、分区例子:
四、分区管理
首頁 資料庫 mysql教程 Mysql实现分区功能(二)_MySQL

Mysql实现分区功能(二)_MySQL

May 27, 2016 pm 02:12 PM
應用程式 伺服器 硬體

bitsCN.com 相信有很多人经常会问同样的一个问题:当 MySQL的总记录数超过了100万后,会出现性能的大幅度下降吗?答案是肯定的,但是性能下 降的比率不一而同,要看系统的架构、应用程序、还有包括索引、服务器硬件等多种因素而定。当有网友问我这个问题的时候,我最常见的回 答就是:分表,可以根据id区间或者时间先后顺序等多种规则来分表。分表很容易,然而由此所带来的应用程序甚至是架构方面的改动工作却不容小觑,还包括将来的扩展性等。

在以前,一种解决方案就是使用 MERGE类型,这是一个非常方便的做饭。架构和程序基本上不用做改动,不过,它的缺点是显见的:

    只能在相同结构的 MyISAM 表上使用无法享受到 MyISAM 的全部功能,例如无法在 MERGE 类型上执行 FULLTEXT 搜索它需要使用更多的文件描述符读取索引更慢

    这个时候,MySQL 5.1 中新增的分区(Partition)功能的优势也就很明显了:

      与单个磁盘或文件系统分区相比,可以存储更多的数据很容易就能删除不用或者过时的数据一些查询可以得到极大的优化涉及到 SUM()/COUNT() 等聚合函数时,可以并行进行IO吞吐量更大

      分区允许可以设置为任意大小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。

      二、分区的类型

        RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包>含MySQL中有效的、产生非负整数值的任何表达式。KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含>整数值。

        三、分区例子:

          RANGE 类型
          CREATE TABLE users (    uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,    name VARCHAR(30) NOT NULL DEFAULT '',    email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY RANGE (uid) (    PARTITION p0 VALUES LESS THAN (3000000)    DATA DIRECTORY = '/data0/data'    INDEX DIRECTORY = '/data1/idx',    PARTITION p1 VALUES LESS THAN (6000000)    DATA DIRECTORY = '/data2/data'    INDEX DIRECTORY = '/data3/idx',    PARTITION p2 VALUES LESS THAN (9000000)    DATA DIRECTORY = '/data4/data'    INDEX DIRECTORY = '/data5/idx',    PARTITION p3 VALUES LESS THAN MAXVALUE    DATA DIRECTORY = '/data6/data'    INDEX DIRECTORY = '/data7/idx');
          登入後複製

          在这里,将用户表分成4个分区,以每300万条记录为界限,每个分区都有自己独立的数据、索引文件的存放目录,与此同时,这些目录所在的物理磁盘分区可能也都是完全独立的,可以多大提高了磁盘IO吞吐量。

          LIST 类型
          CREATE TABLE category (    cid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,    name VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY LIST (cid) (    PARTITION p0 VALUES IN (0,4,8,12)    DATA DIRECTORY = '/data0/data'    INDEX DIRECTORY = '/data1/idx',    PARTITION p1 VALUES IN (1,5,9,13)    DATA DIRECTORY = '/data2/data'    INDEX DIRECTORY = '/data3/idx',    PARTITION p2 VALUES IN (2,6,10,14)    DATA DIRECTORY = '/data4/data'    INDEX DIRECTORY = '/data5/idx',    PARTITION p3 VALUES IN (3,7,11,15)    DATA DIRECTORY = '/data6/data'    INDEX DIRECTORY = '/data7/idx');
          登入後複製

          分成4个区,数据文件和索引文件单独存放。

          HASH 类型
          CREATE TABLE users (    uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,    name VARCHAR(30) NOT NULL DEFAULT '',    email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY HASH (uid) PARTITIONS 4 (    PARTITION p0    DATA DIRECTORY = '/data0/data'    INDEX DIRECTORY = '/data1/idx',    PARTITION p1    DATA DIRECTORY = '/data2/data'    INDEX DIRECTORY = '/data3/idx',    PARTITION p2    DATA DIRECTORY = '/data4/data'    INDEX DIRECTORY = '/data5/idx',    PARTITION p3    DATA DIRECTORY = '/data6/data'    INDEX DIRECTORY = '/data7/idx');
          登入後複製

          分成4个区,数据文件和索引文件单独存放。

          KEY 类型
          REATE TABLE users (    uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,    name VARCHAR(30) NOT NULL DEFAULT '',    email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY KEY (uid) PARTITIONS 4 (    PARTITION p0    DATA DIRECTORY = '/data0/data'    INDEX DIRECTORY = '/data1/idx',    PARTITION p1    DATA DIRECTORY = '/data2/data'    INDEX DIRECTORY = '/data3/idx',    PARTITION p2    DATA DIRECTORY = '/data4/data'    INDEX DIRECTORY = '/data5/idx',    PARTITION p3    DATA DIRECTORY = '/data6/data'    INDEX DIRECTORY = '/data7/idx');
          登入後複製

          分成4个区,数据文件和索引文件单独存放。

          子分区
          子分区是针对 RANGE/LIST 类型的分区表中每个分区的再次分割。再次分割可以是 HASH/KEY 等类型。例如:

          CREATE TABLE users (    uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,    name VARCHAR(30) NOT NULL DEFAULT '',    email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY RANGE (uid) SUBPARTITION BY HASH (uid % 4) SUBPARTITIONS 2(    PARTITION p0 VALUES LESS THAN (3000000)    DATA DIRECTORY = '/data0/data'    INDEX DIRECTORY = '/data1/idx',    PARTITION p1 VALUES LESS THAN (6000000)    DATA DIRECTORY = '/data2/data'    INDEX DIRECTORY = '/data3/idx');
          登入後複製

          对 RANGE 分区再次进行子分区划分,子分区采用 HASH 类型。

          或者

          CREATE TABLE users (    uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,    name VARCHAR(30) NOT NULL DEFAULT '',    email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY RANGE (uid) SUBPARTITION BY KEY(uid) SUBPARTITIONS 2(    PARTITION p0 VALUES LESS THAN (3000000)    DATA DIRECTORY = '/data0/data'    INDEX DIRECTORY = '/data1/idx',    PARTITION p1 VALUES LESS THAN (6000000)    DATA DIRECTORY = '/data2/data'    INDEX DIRECTORY = '/data3/idx');
          登入後複製

          对 RANGE 分区再次进行子分区划分,子分区采用 KEY 类型。

          四、分区管理

          • 删除分区
            ALERT TABLE users DROP PARTITION p0;
            登入後複製

            删除分区 p0。

          • 重建分区
              RANGE 分区重建
              ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000));
              登入後複製

              将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。

              LIST 分区重建
              ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));
              登入後複製

              将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。

              HASH/KEY 分区重建
              ALTER TABLE users REORGANIZE PARTITION COALESCE PARTITION 2;
              登入後複製

              用 REORGANIZE 方式重建分区的数量变成2,在这里数量只能减少不能增加。想要增加可以用 ADD PARTITION 方法。

              新增分区
              • 新增 RANGE 分区
                ALTER TABLE category ADD PARTITION (PARTITION p4 VALUES IN (16,17,18,19)DATA DIRECTORY = '/data8/data'INDEX DIRECTORY = '/data9/idx');
                登入後複製

                新增一个RANGE分区。

                新增 HASH/KEY 分区
                ALTER TABLE users ADD PARTITION PARTITIONS 8;
                登入後複製
                登入後複製

                将分区总数扩展到8个。

                  新增 HASH/KEY 分区
                  ALTER TABLE users ADD PARTITION PARTITIONS 8;
                  登入後複製
                  登入後複製

                  将分区总数扩展到8个。

                  bitsCN.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Windows 11中無法儲存變更照片應用程式錯誤 Windows 11中無法儲存變更照片應用程式錯誤 Mar 04, 2024 am 09:34 AM

如果您在Windows11中使用照片應用程式進行影像編輯時遇到無法儲存變更的錯誤,本文將為您提供解決方案。無法儲存變更。保存時發生錯誤。請稍後再試。通常會出現這種問題的原因包括權限設定不正確、檔案損壞或系統故障。因此,我們經過深入研究,整理出一些最有效的故障排除步驟,以幫助您解決此問題,並確保您可以繼續在Windows11裝置上無縫使用MicrosoftPhotos應用程式。修復Windows11中無法保存更改照片應用程式的錯誤許多用戶在不同的論壇上一直在談論MicrosoftPhotos應用程式錯

照片無法開啟此文件,因為格式不受支援或文件已損壞 照片無法開啟此文件,因為格式不受支援或文件已損壞 Feb 22, 2024 am 09:49 AM

在Windows系統中,照片應用程式是一個方便的方式來檢視和管理照片和影片。透過這個應用程序,用戶可以輕鬆存取他們的多媒體文件,而無需安裝額外的軟體。然而,有時用戶可能會碰到一些問題,例如在使用照片應用程式時遇到「無法開啟此文件,因為不支援該格式」的錯誤提示,或在嘗試開啟照片或影片時出現文件損壞的問題。這種情況可能會讓使用者感到困惑和不便,需要進行一些調查和修復來解決這些問題。當用戶嘗試在Photos應用程式上開啟照片或影片時,會看到以下錯誤。抱歉,照片無法開啟此文件,因為目前不支援該格式,或該文件

如何將Apple Vision Pro連接到PC 如何將Apple Vision Pro連接到PC Apr 08, 2024 pm 09:01 PM

AppleVisionPro頭戴式裝置本身與電腦不相容,因此您必須將其設定為連接到Windows電腦。自推出以來,AppleVisionPro一直備受追捧,擁有其尖端功能和廣泛的可操作性,很容易理解原因。雖然您可以對其進行一些調整以適應PC,並且其功能在很大程度上取決於AppleOS,因此其功能將受到限制。如何將AppleVisionPro連接到我的電腦? 1.驗證系統要求你需要最新版本的Windows11(不支援自訂電腦和Surface設備)支援64位元2GHZ或更快的快速處理器高效能GPU,最

MS Paint在Windows 11中無法正常運作 MS Paint在Windows 11中無法正常運作 Mar 09, 2024 am 09:52 AM

MicrosoftPaint在Windows11/10中不起作用嗎?嗯,這似乎是一個常見的問題,我們有一些很好的解決方案來解決這個問題。用戶一直抱怨說,當試圖使用MSPaint時,無法工作或打開。應用程式中的捲軸不起作用,貼上圖示沒有顯示,崩潰,等等。幸運的是,我們收集了一些最有效的故障排除方法來幫助您解決MicrosoftPaint應用程式的問題。為什麼MicrosoftPaint不起作用? MSPaint無法在Windows11/10PC上運行的一些可能原因如下:安全標識符已損壞。掛起的系統

修復caa90019 Microsoft團隊錯誤 修復caa90019 Microsoft團隊錯誤 Feb 19, 2024 pm 02:30 PM

許多用戶一直在抱怨,每次嘗試使用MicrosoftTeams登入時都會遇到錯誤代碼caa90019。儘管這是一款方便的溝通應用程序,但這種錯誤卻很普遍。修正MicrosoftTeams錯誤:caa90019在這種情況下,系統顯示的錯誤訊息為:「抱歉,我們目前遇到問題。」我們已準備好終極解決方案清單,可協助您解決MicrosoftTeams錯誤caa90019。初步步驟以管理員身分執行清除MicrosoftTeams應用程式快取刪除settings.json檔案從憑證管理員中清除Microso

Shazam應用程式在iPhone中無法運作:修復 Shazam應用程式在iPhone中無法運作:修復 Jun 08, 2024 pm 12:36 PM

iPhone上的Shazam應用程式有問題? Shazam可協助您透過聆聽歌曲找到歌曲。但是,如果Shazam無法正常工作或無法識別歌曲,則必須手動對其進行故障排除。修復Shazam應用程式不會花費很長時間。因此,無需再浪費時間,請按照以下步驟解決Shazam應用程式的問題。修正1–禁用粗體文字功能iPhone上的粗體文字可能是Shazam無法正常運作的原因。步驟1–您只能從iPhone設定執行此操作。所以,打開它。步驟2–接下來,開啟其中的「顯示和亮度」設定。步驟3–如果您發現啟用了“粗體文本

Windows 11中的功能存取管理器服務的高CPU使用率 Windows 11中的功能存取管理器服務的高CPU使用率 Feb 19, 2024 pm 03:06 PM

一些PC使用者和遊戲玩家在使用Windows11或Windows10時,可能會遇到CPU使用率異常高的問題,尤其在執行某些應用程式或遊戲時。這篇文章提供了一些建議,幫助使用者緩解這個問題。一些受影響的PC用戶指出,在遇到這個問題時,他們觀察到任務管理器顯示其他應用程式僅使用0%至5%的CPU,而服務主機:能力存取管理器服務的使用率卻高達80 %至100%。什麼是服務主機:功能存取管理器服務?功能存取管理器服務的作用是確認應用程式是否有權限存取攝影機和麥克風,並授權必要權限。它方便管理UWP應用程式對功

將照片從舊版照片移至Windows 11中的新照片應用程式 將照片從舊版照片移至Windows 11中的新照片應用程式 Mar 10, 2024 am 09:37 AM

本文將指導您如何將照片從PhotosLegacy遷移至Windows11中的新Photos應用程式。微軟在Windows11中引入了經過改進的Photos應用程序,為用戶提供了更簡潔且更豐富的體驗。新的Photos應用程式在對照片進行分類方面與過去的PhotosLegacy應用程式有所不同。它會將照片像其他Windows檔案一樣整理到資料夾中,而不是建立專輯。然而,仍在使用PhotosLegacy應用程式的使用者可以輕鬆將他們的照片遷移至MicrosoftPhotos的新版本。什麼是Phot

See all articles