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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql数据库局限性_Mysql分区表局限性总结

發(fā)布時(shí)間:2023/12/15 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库局限性_Mysql分区表局限性总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Mysql5.1已經(jīng)發(fā)行很久了,本文根據(jù)官方文檔的翻譯和自己的一些測(cè)試,對(duì)Mysql分區(qū)表的局限性做了一些總結(jié),因?yàn)閭€(gè)人能力以及測(cè)試環(huán)境的原因,有可能有錯(cuò)誤的地方,還請(qǐng)大家看到能及時(shí)指出,當(dāng)然有興趣的朋友可以去官方網(wǎng)站查閱。

本文測(cè)試的版本

mysql> select version();

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

| version() |

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

| 5.1.33-log |

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

1 row in set (0.00 sec)

一、關(guān)于Partitioning Keys, Primary Keys, and Unique Keys的限制

在5.1中分區(qū)表對(duì)唯一約束有明確的規(guī)定,每一個(gè)唯一約束必須包含在分區(qū)表的分區(qū)鍵(也包括主鍵約束)。

這句話也許不好理解,我們做幾個(gè)實(shí)驗(yàn):

CREATE TABLE t1

( id INT NOT NULL,

uid INT NOT NULL,

PRIMARY KEY (id)

)

PARTITION BY RANGE (id)

(PARTITION p0 VALUES LESS THAN(5) ENGINE = INNODB,

PARTITION p1 VALUES LESS THAN(10) ENGINE = INNODB

);

CREATE TABLE t1

( id INT NOT NULL,

uid INT NOT NULL,

PRIMARY KEY (id)

)

PARTITION BY RANGE (id)

(PARTITION p0 VALUES LESS THAN(5) ENGINE = MyISAM DATA DIRECTORY='/tmp' INDEX DIRECTORY='/tmp',

PARTITION p1 VALUES LESS THAN(10) ENGINE = MyISAM DATA DIRECTORY='/tmp' INDEX DIRECTORY='/tmp'

);

mysql> CREATE TABLE t1

-> ( id INT NOT NULL,

-> uid INT NOT NULL,

-> PRIMARY KEY (id),

-> UNIQUE KEY (uid)

-> )

-> PARTITION BY RANGE (id)

-> (PARTITION p0 VALUES LESS THAN(5),

-> PARTITION p1 VALUES LESS THAN(10)

-> );

ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function

二、關(guān)于存儲(chǔ)引擎的限制

2.1 MERGE引擎不支持分區(qū),分區(qū)表也不支持merge。

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

2.3 CSV引擎不支持分區(qū)

2.4 BLACKHOLE引擎不支持分區(qū)

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

2.6 當(dāng)升級(jí)MYSQL的時(shí)候,如果你有使用了KEY分區(qū)的表(不管是什么引擎,NDBCLUSTER除外),那么你需要把這個(gè)表dumped在reloaded。

2.7 分區(qū)表的所有分區(qū)或者子分區(qū)的存儲(chǔ)引擎必須相同,這個(gè)限制也許會(huì)在以后的版本取消。

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

所有分區(qū)或者子分區(qū)指定相同引擎。

三、關(guān)于函數(shù)的限制

在mysql5.1中建立分區(qū)表的語句中,只能包含下列函數(shù):

ABS()

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

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 對(duì)象限制

下面這些對(duì)象在不能出現(xiàn)在分區(qū)表達(dá)式

Stored functions, stored procedures, UDFs, or plugins.

Declared variables or user variables.

4.2 運(yùn)算限制

支持加減乘等運(yùn)算出現(xiàn)在分區(qū)表達(dá)式,但是運(yùn)算后的結(jié)果必須是一個(gè)INT或者NULL。 |, &, ^, <>, , ~ 等不允許出現(xiàn)在分區(qū)表達(dá)式。

4.3 sql_mode限制

官方強(qiáng)烈建議你在創(chuàng)建分區(qū)表后,永遠(yuǎn)別改變mysql的sql_mode。因?yàn)樵诓煌哪J较?#xff0c;某些函數(shù)或者運(yùn)算返回的結(jié)果可能會(huì)不一樣。

4.4 Performance considerations.(省略)

4.5 最多支持1024個(gè)分區(qū),包括子分區(qū)。

當(dāng)你建立分區(qū)表包含很多分區(qū)但沒有超過1024限制的時(shí)候,如果報(bào)錯(cuò) Got error 24 from storage engine,那意味著你需要增大open_files_limit參數(shù)。

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

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

mysql> CREATE TABLE articles (

-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,

-> title VARCHAR(200),

-> body TEXT,

-> FULLTEXT (title,body)

-> )

-> PARTITION BY HASH(id)

-> PARTITIONS 4;

ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes

4.8 不支持spatial column types。

4.9 臨時(shí)表不能被分區(qū)。

mysql> CREATE Temporary TABLE t1

-> ( id INT NOT NULL,

-> uid INT NOT NULL,

-> PRIMARY KEY (id)

-> )

-> PARTITION BY RANGE (id)

-> (PARTITION p0 VALUES LESS THAN(5) ENGINE = MyISAM,

-> PARTITION p1 VALUES LESS THAN(10) ENGINE = MyISAM

-> );

ERROR 1562 (HY000): Cannot create temporary table with partitions

4.10 log table不支持分區(qū)。

mysql> alter table mysql.slow_log PARTITION BY KEY(start_time) PARTITIONS 2;

ERROR 1221 (HY000): Incorrect usage of PARTITION and log table

5.11 分區(qū)鍵必須是INT類型,或者通過表達(dá)式返回INT類型,可以為NULL。唯一的例外是當(dāng)分區(qū)類型為KEY分區(qū)的時(shí)候,可以使用其他類型的列作為分區(qū)鍵( BLOB or TEXT 列除外)。

mysql> CREATE TABLE tkc (c1 CHAR)

-> PARTITION BY KEY(c1)

-> PARTITIONS 4;

Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE tkc2 (c1 CHAR)

-> PARTITION BY HASH(c1)

-> PARTITIONS 4;

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

mysql> CREATE TABLE tkc3 (c1 INT)

-> PARTITION BY HASH(c1)

-> PARTITIONS 4;

Query OK, 0 rows affected (0.00 sec)

5.12 分區(qū)鍵不能是一個(gè)子查詢。 A partitioning key may not be a subquery, even if that subquery resolves to an integer value or NULL

5.13 只有RANG和LIST分區(qū)能進(jìn)行子分區(qū)。HASH和KEY分區(qū)不能進(jìn)行子分區(qū)。

5.14 分區(qū)表不支持Key caches。

mysql> SET GLOBAL keycache1.key_buffer_size=128*1024;

Query OK, 0 rows affected (0.00 sec)

mysql> CACHE INDEX login,user_msg,user_msg_p IN keycache1;

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

| 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 for the table doesn't support assign_to_keycache |

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

3 rows in set (0.00 sec)

5.15 分區(qū)表不支持INSERT DELAYED.

mysql> insert DELAYED into user_msg_p values(18156629,0,0,0,0,0,0,0,0,0);

ERROR 1616 (HY000): DELAYED option not supported for table 'user_msg_p'

5.16 DATA DIRECTORY 和 INDEX DIRECTORY 參數(shù)在分區(qū)表將被忽略。

這個(gè)限制應(yīng)該不存在了:

mysql> CREATE TABLE t1

-> ( id INT NOT NULL,

-> uid INT NOT NULL,

-> PRIMARY KEY (id)

-> )

-> PARTITION BY RANGE (id)

-> (PARTITION p0 VALUES LESS THAN(5) ENGINE = MyISAM DATA DIRECTORY='/tmp' INDEX DIRECTORY='/tmp',

-> PARTITION p1 VALUES LESS THAN(10) ENGINE = MyISAM DATA DIRECTORY='/tmp' INDEX DIRECTORY='/tmp'

-> );

Query OK, 0 rows affected (0.01 sec)

5.17 分區(qū)表不支持mysqlcheck和myisamchk

在5.1.33版本中已經(jīng)支持mysqlcheck和myisamchk

./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

- check file-size

- check record delete-chain

- check key delete-chain

- check index reference

- check data record references index: 1

Key: 1: Keyblocks used: 98% Packed: 0% Max levels: 4

Total: Keyblocks used: 98% Packed: 0%

User time 0.97, System time 0.02

Maximum resident set size 0, Integral resident set size 0

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

Blocks in 0 out 0, Messages in 0 out 0, Signals 0

Voluntary context switches 1, Involuntary context switches 5

5.18 分區(qū)表的分區(qū)鍵創(chuàng)建索引,那么這個(gè)索引也將被分區(qū)。分區(qū)鍵沒有全局索引一說。

5.19 在分區(qū)表使用ALTER TABLE … ORDER BY,只能在每個(gè)分區(qū)內(nèi)進(jìn)行order by。

總結(jié)

以上是生活随笔為你收集整理的mysql数据库局限性_Mysql分区表局限性总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。