搜尋
首頁資料庫mysql教程資料庫表格分割區可提升插入效率嗎?
資料庫表格分割區可提升插入效率嗎?Jul 22, 2020 am 11:52 AM
分割區資料庫

資料庫表格分割區可提升插入效率;資料庫表格分割區可提高表格增刪改查的效率。資料庫表分區進行插入操作的原理:當寫入一筆記錄時,分區層會開啟並鎖住所有的底層表,然後確定哪個分區接受這條記錄,再將記錄寫入對應的底層表。

資料庫表格分割區可提升插入效率嗎?

什麼是分割區?

分割區是依照規則分解表,將資料分段分割在多個位置存放,可以是同一塊磁碟也可以在不同的機器。分區後,表面上還是一張表,但資料散列到多個位置了。 app讀寫的時候操作的還是大表名字,db自動去組織分區的資料。

分區又可以分為兩種:

#1、水平分區(Horizo​​ntal Partitioning)

這種形式分區是將表格的行進行分區,透過這樣的方式不同分組裡面的物理列分割的資料集得以組合,從而進行個體分割(單分區)或集體分割(1個或多個分區) 。所有在表中定義的列在每個資料集中都能找到,

所以表的特性依然得以維持。

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

2、垂直分區( Vertical Partitioning)

這種分區方式一般來說是透過對錶的垂直劃分來減少目標表的寬度,使某些特定的列被劃分到特定的分區,每個分區都包含了其中的列所對應的行。

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

分區表的原理

分區表是由多個相關的底層表實現,這些底層表也是由句柄物件表示,所以我們也可以直接存取各個分區,儲存引擎管理分區的各個底層表和管理普通表一樣(所有的底層表都必須使用相同的儲存引擎),分區表的索引只是在各個底層表上各自加上一個相同的索引,從儲存引擎的角度來看,底層表和一個普通表沒有任何不同,儲存引擎也無須知道這是一個普通表還是一個分區表的一部分。

在分區表上的操作按照下面的操作邏輯進行:

select查詢:

當查詢一個分區表的時候,分區層先打開並鎖住所有的底層表,優化器判斷是否可以過濾部分分區,然後再調用對應的儲存引擎介面存取各個分區的資料

insert操作:

當寫入一條記錄時,分區層打開並鎖住所有的底層表,然後確定哪個分區接受這條記錄,再將記錄寫入對應的底層表

delete操作:

當刪除一筆記錄時,分區層先打開並鎖住所有的底層表,然後確定資料對應的分區,最後對相應底層表進行刪除操作

update操作:

當更新一條資料時,分區層先打開並且鎖住所有的底層表,mysql先確定需要更新的記錄在哪個分區,然後取出數據並更新,再判斷更新後的數據應該放在哪個分區,然後對底層表進行寫入操作,並對原數據所在的底層表進行刪除操作

雖然每個操作都會打開並鎖住所有的底層表,但這並不是說分區表在處理過程中是鎖住全表的,如果存儲引擎能夠自己實現行級鎖,如:innodb,則會在分區層釋放對應的表鎖,這個加鎖和解鎖過程與普通Innodb上的查詢類似。

在下面的場景中,分割區可以起到非常大的作用:

A:表非常大以至於無法全部都放在記憶體中,或只在表的最後部分有熱點數據,其他都是歷史數據

B:分區表的數據更容易維護,如:想批量刪除大量數據可以使用清除整個分區的方式。另外,還可以對一個獨立分區進行最佳化、檢查、修復等操作

C:分區表的資料可以分佈在不同的實體設備上,從而有效率地利用多個硬體設備

#D:可以使用分區表來避免某些特殊的瓶頸,如:innodb的單一索引的互斥訪問,ext3檔案系統的inode鎖定競爭等

E:如果需要,還可以備份和恢復獨立的分區,這在非常大的資料集的場景下效果非常好

F:最佳化查詢,在where字句中包含分區列時,可以只使用必要的分區來提高查詢效率,同時在涉及sum()和count()這類聚合函數的查詢時,可以在每個分區上面並行處理,最終只需要總結所有分區得到的結果。

mysql資料庫的分區總是把null當作比任何非null更小的值,這和資料庫中處理null值的order by操作是一樣的,升序排序時null總是在最前面,因此對於不同的分割區類型,mysql資料庫對於null的處理也各不相同。

對於range分割區,如果向分割區列插入了null,則mysql資料庫會將該值放入最左邊的分割區,注意,如果刪除分割區,分割區下的所有內容都從磁碟中刪掉了,null所在分割區被刪除,null值也跟著被刪除了。

在list分割區下要使用null,則必須明確定義在分割區的雜湊值中,否則插入null時會報錯。 hash和key分割區對於null的處理方式和range,list分割區不一樣,任何分割函數都會將null傳回為0.

分區就是將資料庫或其構成元素分割成不同的獨立部分

-是一種預先組織表格儲存的方法

##mysql支援水平分割區

#將特定表行指派為行的子集

分區的分佈是跨實體儲存進行的

—根據使用者在需要時設定的指定規則

——每個分區儲存為其自己的單元

資料的分割

—根據分區功能將資料分割為子集

——分區類型和表達式是表定義的一部分

——表達式可以是整數或傳回整數值的函數。

——此值根據定義決定將每個記錄儲存在哪個分區中

1.primary key和unique key必須包含在分區key的一部分,否則在建立primary key和unique index時會報”ERROR 1503 (HY000)“

2.範圍分區添加分區只能在最大值後面追加分區

3.所有分區的engine必須一樣

4.範圍分區分區字段:integer、數值表達式、日期列,日期函數表達式(如year(),to_days(),to_seconds(),unix_timestamp())

#分割區管理

新增分割區

ALTER TABLE sale_data
ADD PARTITION (PARTITION p201010 VALUES LESS THAN (201011));

#刪除分割區

–當刪除了一個分區,也同時刪除了該分割區中所有的資料。

ALTER TABLE sale_data DROP PARTITION p201010;

分區的合併

下面的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)
);

相關推薦:《 

#PHP教學 》、《mysql教學

以上是資料庫表格分割區可提升插入效率嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
深入理解MySQL索引优化器工作原理深入理解MySQL索引优化器工作原理Nov 09, 2022 pm 02:05 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引优化器工作原理的相关内容,其中包括了MySQL Server的组成,MySQL优化器选择索引额原理以及SQL成本分析,最后通过 select 查询总结整个查询过程,下面一起来看一下,希望对大家有帮助。

sybase是什么数据库sybase是什么数据库Sep 22, 2021 am 11:39 AM

sybase是基于客户/服务器体系结构的数据库,是一个开放的、高性能的、可编程的数据库,可使用事件驱动的触发器、多线索化等来提高性能。

visual foxpro数据库文件是什么visual foxpro数据库文件是什么Jul 23, 2021 pm 04:53 PM

visual foxpro数据库文件是管理数据库对象的系统文件。在VFP中,用户数据是存放在“.DBF”表文件中;VFP的数据库文件(“.DBC”)中不存放用户数据,它只起将属于某一数据库的 数据库表与视图、连接、存储过程等关联起来的作用。

数据库系统的构成包括哪些数据库系统的构成包括哪些Jul 15, 2022 am 11:58 AM

数据库系统由4个部分构成:1、数据库,是指长期存储在计算机内的,有组织,可共享的数据的集合;2、硬件,是指构成计算机系统的各种物理设备,包括存储所需的外部设备;3、软件,包括操作系统、数据库管理系统及应用程序;4、人员,包括系统分析员和数据库设计人员、应用程序员(负责编写使用数据库的应用程序)、最终用户(利用接口或查询语言访问数据库)、数据库管理员(负责数据库的总体信息控制)。

microsoft sql server是什么软件microsoft sql server是什么软件Feb 28, 2023 pm 03:00 PM

microsoft sql server是Microsoft公司推出的关系型数据库管理系统,是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理,具有使用方便可伸缩性好与相关软件集成程度高等优点。SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。

access数据库的结构层次是什么access数据库的结构层次是什么Aug 26, 2022 pm 04:45 PM

结构层次是“数据库→数据表→记录→字段”;字段构成记录,记录构成数据表,数据表构成了数据库。数据库是一个完整的数据的记录的整体,一个数据库包含0到N个表,一个表包含0到N个字段,记录是表中的行。

go语言可以写数据库么go语言可以写数据库么Jan 06, 2023 am 10:35 AM

go语言可以写数据库。Go语言和其他语言不同的地方是,Go官方没有提供数据库驱动,而是编写了开发数据库驱动的标准接口,开发者可以根据定义的接口来开发相应的数据库驱动;这样做的好处在于,只要是按照标准接口开发的代码,以后迁移数据库时,不需要做任何修改,极大方便了后期的架构调整。

mysql查询慢的因素除了索引,还有什么?mysql查询慢的因素除了索引,还有什么?Jul 19, 2022 pm 08:22 PM

mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题。遇到这种问题,我们一般也会想到是因为索引。那除开索引之外,还有哪些因素会导致数据库查询变慢呢?

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),