mysql 表分區優缺點_Mysql分區表局限性總結

本文測試的版本

XML/HTML代碼

mysql>select?version();

+------------+

|?version()?|

+------------+

|?5.1.33-log?|

+------------+

1?row?in?set?(0.00?sec)

一、關于Partitioning Keys, Primary Keys, and Unique

Keys的限制

在5.1中分區表對唯一約束有明確的規定,每一個唯一約束必須包含在分區表的分區鍵(也包括主鍵約束)。

這句話也許不好理解,我們做幾個實驗:

SQL代碼

CREATETABLEt1

(?id?INTNOTNULL,

uid?INTNOTNULL,

PRIMARYKEY(id)

)

PARTITION?BYRANGE?(id)

(PARTITION?p0?VALUESLESS?THAN(5)?ENGINE?=?INNODB,

PARTITION?p1?VALUESLESS?THAN(10)?ENGINE?=?INNODB

);

CREATETABLEt1

(?id?INTNOTNULL,

uid?INTNOTNULL,

PRIMARYKEY(id)

)

PARTITION?BYRANGE?(id)

(PARTITION?p0?VALUESLESS?THAN(5)?ENGINE?=?MyISAM?DATA?DIRECTORY='/tmp'INDEXDIRECTORY='/tmp',

PARTITION?p1?VALUESLESS?THAN(10)?ENGINE?=?MyISAM?DATA?DIRECTORY='/tmp'INDEXDIRECTORY='/tmp'

);

mysql>?CREATETABLEt1

->?(?id?INTNOTNULL,

->?uid?INTNOTNULL,

->?PRIMARYKEY(id),

->?UNIQUEKEY(uid)

->?)

->?PARTITION?BYRANGE?(id)

->?(PARTITION?p0?VALUESLESS?THAN(5),

->?PARTITION?p1?VALUESLESS?THAN(10)

->?);

ERROR?1503?(HY000):?A?UNIQUEINDEXmust?includeallcolumnsinthetable's?partitioningfunction

二、關于存儲引擎的限制

2.1 MERGE引擎不支持分區,分區表也不支持merge。

2.2 FEDERATED引擎不支持分區。這限制可能會在以后的版本去掉。

2.3 CSV引擎不支持分區

2.4 BLACKHOLE引擎不支持分區

2.5 在NDBCLUSTER引擎上使用分區表,分區類型只能是KEY(or LINEAR KEY) 分區。

2.6

當升級MYSQL的時候,如果你有使用了KEY分區的表(不管是什么引擎,NDBCLUSTER除外),那么你需要把這個表dumped在

reloaded。

2.7 分區表的所有分區或者子分區的存儲引擎必須相同,這個限制也許會在以后的版本取消。

不指定任何引擎(使用默認引擎)。

所有分區或者子分區指定相同引擎。

三、關于函數的限制

在mysql5.1中建立分區表的語句中,只能包含下列函數:

ABS()

CEILING() and FLOOR() (在使用這2個函數的建立分區表的前提是使用函數的分區鍵是INT類型),例如

XML/HTML代碼

mysql>CREATE?TABLE?t?(c?FLOAT)?PARTITION?BY?LIST(?FLOOR(c)?)(

->PARTITION?p0?VALUES?IN?(1,3,5),

->PARTITION?p1?VALUES?IN?(2,4,6)

->);;

ERROR?1491?(HY000):?The?PARTITION?function?returns?the?wrong?type

mysql>CREATE?TABLE?t?(c?int)?PARTITION?BY?LIST(?FLOOR(c)?)(

->PARTITION?p0?VALUES?IN?(1,3,5),

->PARTITION?p1?VALUES?IN?(2,4,6)

->);

Query?OK,?0?rows?affected?(0.01?sec)

DAY()

DAYOFMONTH()

DAYOFWEEK()

DAYOFYEAR()

DATEDIFF()

EXTRACT()

HOUR()

MICROSECOND()

MINUTE()

MOD()

MONTH()

QUARTER()

SECOND()

TIME_TO_SEC()

TO_DAYS()

WEEKDAY()

YEAR()

YEARWEEK()

四、其他限制

4.1 對象限制

下面這些對象在不能出現在分區表達式

Stored functions, stored procedures, UDFs, or plugins.

Declared variables or user variables.

4.2 運算限制

支持加減乘等運算出現在分區表達式,但是運算后的結果必須是一個INT或者NULL。 |, &, ^, <

>>, , ~ 等不允許出現在分區表達式。

4.3 sql_mode限制

官方強烈建議你在創建分區表后,永遠別改變mysql的sql_mode。因為在不同的模式下,某些函數或者運算返回的結果可能會不一樣。

4.4 Performance considerations.(省略)

4.5 最多支持1024個分區,包括子分區。

當你建立分區表包含很多分區但沒有超過1024限制的時候,如果報錯 Got error 24 from storage

engine,那意味著你需要增大open_files_limit參數。

4.6 不支持外鍵。MYSQL中,INNODB引擎才支持外鍵。

4.7 不支持FULLTEXT indexes(全文索引),包括MYISAM引擎。

SQL代碼

mysql>CREATETABLEarticles?(

->?id?INTUNSIGNED?AUTO_INCREMENTNOTNULLPRIMARYKEY,

->?title?VARCHAR(200),

->?body?TEXT,

->?FULLTEXT?(title,body)

->?)

->?PARTITION?BYHASH(id)

->?PARTITIONS?4;

ERROR?1214?(HY000):?The?used?tabletype?doesn't?support?FULLTEXT?indexes

4.8

不支持spatial column types。

4.9 臨時表不能被分區。

SQL代碼

mysql>CREATETemporaryTABLEt1

->?(?id?INTNOTNULL,

->?uid?INTNOTNULL,

->?PRIMARYKEY(id)

->?)

->?PARTITION?BYRANGE?(id)

->?(PARTITION?p0?VALUESLESS?THAN(5)?ENGINE?=?MyISAM,

->?PARTITION?p1?VALUESLESS?THAN(10)?ENGINE?=?MyISAM

->?);

ERROR?1562?(HY000):?Cannot?createtemporarytablewithpartitions

4.10

log table不支持分區。

SQL代碼

mysql>altertablemysql.slow_log?PARTITIONBYKEY(start_time)?PARTITIONS?2;

ERROR?1221?(HY000):?Incorrect?usage?ofPARTITIONandlogtable

5.11

分區鍵必須是INT類型,或者通過表達式返回INT類型,可以為NULL。唯一的例外是當分區類型為KEY分區的時候,可以使用其他類型的列作為分區鍵(

BLOB or TEXT 列除外)。

SQL代碼

mysql>CREATETABLEtkc?(c1CHAR)

->?PARTITION?BYKEY(c1)

->?PARTITIONS?4;

Query?OK,?0?rowsaffected?(0.00?sec)

mysql>?CREATETABLEtkc2?(c1CHAR)

->?PARTITION?BYHASH(c1)

->?PARTITIONS?4;

ERROR?1491?(HY000):?The?PARTITION?functionreturnsthe?wrong?type

mysql>?CREATETABLEtkc3?(c1INT)

->?PARTITION?BYHASH(c1)

->?PARTITIONS?4;

Query?OK,?0?rowsaffected?(0.00?sec)

5.12 分區鍵不能是一個子查詢。 A partitioning key may not be a subquery, even if

that subquery resolves to an integer value or NULL

5.13 只有RANG和LIST分區能進行子分區。HASH和KEY分區不能進行子分區。

5.14 分區表不支持Key caches。

SQL代碼

mysql>SETGLOBALkeycache1.key_buffer_size=128*1024;

Query?OK,?0?rowsaffected?(0.00?sec)

mysql>?CACHE?INDEXlogin,user_msg,user_msg_pINkeycache1;

+-----------------+--------------------+----------+---------------------------------------------------------------------+

|?Table|?Op?|?Msg_type?|?Msg_text?|

+-----------------+--------------------+----------+---------------------------------------------------------------------+

|?test.login?|?assign_to_keycache?|?status?|?OK?|

|?test.user_msg?|?assign_to_keycache?|?status?|?OK?|

|?test.user_msg_p?|?assign_to_keycache?|?note?|?The?storage?engine?forthetabledoesn't?support?assign_to_keycache?|

+-----------------+--------------------+----------+---------------------------------------------------------------------+

3?rowsinset(0.00?sec)

5.15

分區表不支持INSERT DELAYED.

SQL代碼

mysql>insertDELAYEDintouser_msg_pvalues(18156629,0,0,0,0,0,0,0,0,0);

ERROR?1616?(HY000):?DELAYED?optionnotsupportedfortable'user_msg_p'

5.16

DATA DIRECTORY 和 INDEX DIRECTORY 參數在分區表將被忽略。

這個限制應該不存在了:

SQL代碼

mysql>CREATETABLEt1

->?(?id?INTNOTNULL,

->?uid?INTNOTNULL,

->?PRIMARYKEY(id)

->?)

->?PARTITION?BYRANGE?(id)

->?(PARTITION?p0?VALUESLESS?THAN(5)?ENGINE?=?MyISAM?DATA?DIRECTORY='/tmp'INDEXDIRECTORY='/tmp',

->?PARTITION?p1?VALUESLESS?THAN(10)?ENGINE?=?MyISAM?DATA?DIRECTORY='/tmp'INDEXDIRECTORY='/tmp'

->?);

Query?OK,?0?rowsaffected?(0.01?sec)

5.17

分區表不支持mysqlcheck和myisamchk

在5.1.33版本中已經支持mysqlcheck和myisamchk

SQL代碼

./mysqlcheck?-u?-p?-r?test?user_msg_p;

test.user_msg_p?OK

./myisamchk?-i?/u01/data/test/user_msg_p#P#p0.MYI

Checking?MyISAM?file:?/u01/data/test/user_msg_p#P#p0.MYI

Data?records:?4423615?Deleted?blocks:?0

-?checkfile-size

-?checkrecorddelete-chain

-?checkkeydelete-chain

-?checkindexreference

-?checkdata?recordreferencesindex:?1

Key:?1:?Keyblocks?used:?98%?Packed:?0%Maxlevels:?4

Total:?Keyblocks?used:?98%?Packed:?0%

Usertime0.97,?Systemtime0.02

Maximum?resident?setsize0,?Integral?residentsetsize0

Non-physical?pagefaults?324,?Physical?pagefaults?0,?Swaps?0

Blocks?in0out0,?Messagesin0out0,?Signals?0

Voluntary?context?switches?1,?Involuntary?context?switches?5

5.18

分區表的分區鍵創建索引,那么這個索引也將被分區。分區鍵沒有全局索引一說。

5.19 在分區表使用ALTER TABLE … ORDER BY,只能在每個分區內進行order by。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393588.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393588.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# PagedList 真分頁

一&#xff1a;nuget 下載 PagedList 二&#xff1a;前端頁面 1.需要的數據 model PagedList.IPagedList<DeviceModel>  using PagedList.Mvc 2.使用數據 foreach (var item in Model)   {    <tr> <td>item.Name</td>       <td>…

leetcode1497. 檢查數組對是否可以被 k 整除

給你一個整數數組 arr 和一個整數 k &#xff0c;其中數組長度是偶數&#xff0c;值為 n 。 現在需要把數組恰好分成 n / 2 對&#xff0c;以使每對數字的和都能夠被 k 整除。 如果存在這樣的分法&#xff0c;請返回 True &#xff1b;否則&#xff0c;返回 False 。 示例 1…

計算機頁面設置代碼,計算機二級考試Access輔導:頁面設置模塊代碼分享

Dim up, dn, le, ri, si, liAs Single , co As string’定義邊距及頁面函數Sub ymszmk(strName As String) ’頁面設置模塊On Error GoTo Err_ymszmkIf Nz(DCount("*", "REPORTLIP", "REPORT’" & strName & "’")) 0 ThenMs…

讓我們了解Set及其在JavaScript中的獨特功能

by Asif Norzai通過Asif Norzai 讓我們了解Set及其在JavaScript中的獨特功能&#x1f3b2; (Lets learn about Set and its unique functionality in JavaScript &#x1f3b2;) 設置&#x1f3b2; (SET &#x1f3b2;) ES2015/ES6 gave us a lot of useful tools and feature…

C語言第二次博客作業---分支結構

一、PTA實驗作業 題目1&#xff1a;計算分段函數[2] 本題目要求計算下列分段函數f(x)的值&#xff1a; 1.實驗代碼 double x,result;scanf("%lf",&x);if(x>0){resultsqrt(x);}else{resultpow(x1,2)2*x1/x;}printf("f(%.2f) %.2f",x,result); 2 設計…

oracle+數據到+mysql數據庫亂碼_oracle數據mysql數據庫亂碼

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云數據庫專家保駕護航&#xff0c;為用戶…

ajax 不執行

1、get形式訪問&#xff1a; 一個相同的URL 只有一個結果&#xff0c;所以 第二次訪問的時候 如果 URL字符串沒變化 瀏覽器是 直接拿出了第一次訪問的結果&#xff0c;post則不會 解決辦法: 1、urlnew Date(); &#xff08;每次訪問時url不同&#xff09; 2、 type : get,   …

leetcode870. 優勢洗牌(貪心算法)

給定兩個大小相等的數組 A 和 B&#xff0c;A 相對于 B 的優勢可以用滿足 A[i] > B[i] 的索引 i 的數目來描述。 返回 A 的任意排列&#xff0c;使其相對于 B 的優勢最大化。 示例 1&#xff1a; 輸入&#xff1a;A [2,7,11,15], B [1,10,4,11] 輸出&#xff1a;[2,11,…

Mysql中行轉列和列轉行

一、行轉列即將原本同一列下多行的不同內容作為多個字段&#xff0c;輸出對應內容。建表語句DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT 用戶id, subject VARCHAR(20) COMMENT…

OSChina 周四亂彈 ——妹子喜歡的是程序員 這是標準……

2019獨角獸企業重金招聘Python工程師標準>>> Osc亂彈歌單&#xff08;2017&#xff09;請戳&#xff08;這里&#xff09; 【今日歌曲】 一葉孤鴻 &#xff1a;分享Nanaka的單曲《いのちの名前&#xff08;Cover 木村弓&#xff09;》 《いのちの名前&#xff08;C…

阿里薪資談判技巧_如何像專業人士一樣處理技術職業中的薪資談判

阿里薪資談判技巧by Aline Lerner通過艾琳勒納(Aline Lerner) 如何像專業人士一樣處理技術職業中的薪資談判 (How to handle salary negotiations in your tech career like a pro) 確切地談薪水時要說些什么 (Know exactly what to say when negotiating your salary) There …

xp系統sql服務器怎么找,SQL文件在winxp系統下怎么打開

很多用戶不知道SQL文件是什么?SQL文件怎么打開?我們存儲數據時候經常會遇到SQL文件&#xff0c;如果你不知道WinXP系統SQL文件是什么以及怎么打開的話&#xff0c;那就趕緊看看小編整理的以下文章內容吧!SQL文件是什么?學習編程的同學可能都知道SQL是一種高級的非過程化的編…

Silverlight 設計器加載錯誤

每次打開silverlight頁面出如下錯誤 然后設計器不能將頁面加載出來 最后找了蠻多資料的 感覺這個原因有可能&#xff1a;“控制面板的添加刪除程序那里&#xff0c;選中Microsoft Silverlight&#xff0c;看看他的版本&#xff0c;是否與所裝的SDK的版本號一致。就算兩個版本號…

mysql索引優化實際例子_MySQL索引優化的實際案例分析

Order by desc/asc limit M是我在mysql sql優化中經常遇到的一種場景&#xff0c;其優化原理也非常的簡單&#xff0c;就是利用索引的有序性&#xff0c;優化器沿著索引的順序掃描&#xff0c;在掃描到符合條件的M行數據后&#xff0c;停止掃描&#xff1b;看起來非常的簡單&am…

leetcode441. 排列硬幣(二分查找)

你總共有 n 枚硬幣&#xff0c;你需要將它們擺成一個階梯形狀&#xff0c;第 k 行就必須正好有 k 枚硬幣。 給定一個數字 n&#xff0c;找出可形成完整階梯行的總行數。 n 是一個非負整數&#xff0c;并且在32位有符號整型的范圍內。 示例 1: n 5 硬幣可排列成以下幾行: …

【洛谷 P2051】 [AHOI2009]中國象棋(DP)

題目鏈接 首先想到狀壓dp&#xff0c;但是\(n,m\)高達100&#xff0c;怎么壓&#xff1f; 容易發現&#xff0c;每行每列最多兩個象棋&#xff0c;否則就直接gg了。 一個巧妙的設置狀態的方式是&#xff0c;只需要記錄到當前行有多少列是放了1個炮和2個炮。 然后每一行有3種選擇…

循環 直到 python_如果您在Python中存在慢循環,則可以對其進行修復……直到無法解決為止...

循環 直到 pythonby Maxim Mamaev馬克西姆馬馬耶夫(Maxim Mamaev) Let’s take a computational problem as an example, write some code, and see how we can improve the running time. Here we go.讓我們以一個計算問題為例&#xff0c;編寫一些代碼&#xff0c;看看如何改…

阿里云視頻點播解決方案使用教程

2019獨角獸企業重金招聘Python工程師標準>>> 課程介紹 視頻點播&#xff08;ApsaraVideo for VoD&#xff0c;簡稱VoD&#xff09;是集視頻音視頻采集、編輯、上傳、自動化轉碼處理、媒體資源管理、分發加速于一體的一站式音視頻點播解決方案。 產品詳情&#xff1a…

云服務器安裝操作系統后如何連接,服務器如何安裝操作系統

服務器如何安裝操作系統 內容精選換一換如果您需要使用畢昇編譯器&#xff0c;則需要先在服務端安裝畢昇編譯器。畢昇編譯器基于開源LLVM開發&#xff0c;并進行了優化和改進&#xff0c;同時將flang作為默認的Fortran語言前端編譯器&#xff0c;是針對鯤鵬平臺的高性能編譯器。…

換行符

非原創windows保留\r\n作為換行符的原因&#xff1a; 回車鍵為什么叫回車鍵&#xff0c;大家有想過沒有&#xff0c;字面意思是回去的車子。 第一臺打印機&#xff0c;每一行打印完了之后在打印第二行之前&#xff0c;這個噴墨的玩意兒需要先回到這一行的行首&#xff0c;這叫回…