日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 表分区优缺点_Mysql分区表局限性总结

發布時間:2023/12/9 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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。

總結

以上是生活随笔為你收集整理的mysql 表分区优缺点_Mysql分区表局限性总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。