真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql支持分區(qū)嗎

這篇文章主要介紹“MySQL支持分區(qū)嗎”,在日常操作中,相信很多人在mysql支持分區(qū)嗎問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”mysql支持分區(qū)嗎”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),宜昌企業(yè)網(wǎng)站建設(shè),宜昌品牌網(wǎng)站建設(shè),網(wǎng)站定制,宜昌網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,宜昌網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

mysql從5.1版本開始支持分區(qū)功能。MySQL5.1中分區(qū)表達(dá)式必須是整數(shù),或者返回整數(shù)的表達(dá)式;而MySQL5.5中提供了非整數(shù)表達(dá)式分區(qū)的支持。MySQL數(shù)據(jù)庫的分區(qū)是局部分區(qū)索引,一個分區(qū)中既存了數(shù)據(jù),又放了索引;也就是說,每個區(qū)的聚集索引和非聚集索引都放在各自區(qū)的(不同的物理文件)。MySQL支持4種分區(qū)類型:RANGE分區(qū),LIST分區(qū),HASH分區(qū),KEY分區(qū)。

本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

mysql支持分區(qū)。

mysql分區(qū)概述

MySQL在5.1時添加了對水平分區(qū)的支持。分區(qū)是將一個表或索引分解成多個更小,更可管理的部分。每個區(qū)都是獨立的,可以獨立處理,也可以作為一個更大對象的一部分進行處理。這個是MySQL支持的功能,業(yè)務(wù)代碼無需改動。要知道MySQL是面向OLTP的數(shù)據(jù),它不像TIDB等其他DB。那么對于分區(qū)的使用應(yīng)該非常小心,如果不清楚如何使用分區(qū)可能會對性能產(chǎn)生負(fù)面的影響。

MySQL數(shù)據(jù)庫的分區(qū)是局部分區(qū)索引,一個分區(qū)中既存了數(shù)據(jù),又放了索引。也就是說,每個區(qū)的聚集索引和非聚集索引都放在各自區(qū)的(不同的物理文件)。目前MySQL數(shù)據(jù)庫還不支持全局分區(qū)。

無論哪種類型的分區(qū),如果表中存在主鍵或唯一索引時,分區(qū)列必須是唯一索引的一個組成部分。

分區(qū)表的限制因素

(1)、一個表最多只能有1024個分區(qū)。

(2)、 MySQL5.1中,分區(qū)表達(dá)式必須是整數(shù),或者返回整數(shù)的表達(dá)式。在MySQL5.5中提供了非整數(shù)表達(dá)式分區(qū)的支持。

(3)、如果分區(qū)字段中有主鍵或者唯一索引的列,那么多有主鍵列和唯一索引列都必須包含進來。即:分區(qū)字段要么不包含主鍵或者索引列,要么包含全部主鍵和索引列。

(4)、分區(qū)表中無法使用外鍵約束。

(5)、MySQL的分區(qū)適用于一個表的所有數(shù)據(jù)和索引,不能只對表數(shù)據(jù)分區(qū)而不對索引分區(qū),也不能只對索引分區(qū)而不對表分區(qū),也不能只對表的一部分?jǐn)?shù)據(jù)分區(qū)。

分區(qū)類型

目前MySQL支持一下幾種類型的分區(qū),RANGE分區(qū),LIST分區(qū),HASH分區(qū),KEY分區(qū)。如果表存在主鍵或者唯一索引時,分區(qū)列必須是唯一索引的一個組成部分。實戰(zhàn)十有八九都是用RANGE分區(qū)。

RANGE分區(qū)

RANGE分區(qū)是實戰(zhàn)最常用的一種分區(qū)類型,行數(shù)據(jù)基于屬于一個給定的連續(xù)區(qū)間的列值被放入分區(qū)。但是記住,當(dāng)插入的數(shù)據(jù)不在一個分區(qū)中定義的值的時候,會拋異常。

RANGE分區(qū)主要用于日期列的分區(qū),比如交易表啊,銷售表啊等??梢愿鶕?jù)年月來存放數(shù)據(jù)。如果你分區(qū)走的唯一索引中date類型的數(shù)據(jù),那么注意了,優(yōu)化器只能對YEAR(),TO_DAYS(),TO_SECONDS(),UNIX_TIMESTAMP()這類函數(shù)進行優(yōu)化選擇。實戰(zhàn)中可以用int類型,那么只用存yyyyMM就好了。也不用關(guān)心函數(shù)了。

CREATE TABLE `m_test_db`.`Order` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `partition_key` INT NOT NULL,
    `amt` DECIMAL(5) NULL,
    PRIMARY KEY (`id` , `partition_key`)
) PARTITION BY RANGE (partition_key) PARTITIONS 5 (
PARTITION part0 VALUES LESS THAN (201901) , 
PARTITION part1 VALUES LESS THAN (201902) , 
PARTITION part2 VALUES LESS THAN (201903) , 
PARTITION part3 VALUES LESS THAN (201904) , 
PARTITION part4 VALUES LESS THAN (201905));

這時候我們先插入一些數(shù)據(jù)

INSERT INTO `m_test_db`.`Order` (`id`, `partition_key`, `amt`) VALUES ('1', '201901', '1000');
INSERT INTO `m_test_db`.`Order` (`id`, `partition_key`, `amt`) VALUES ('2', '201902', '800');
INSERT INTO `m_test_db`.`Order` (`id`, `partition_key`, `amt`) VALUES ('3', '201903', '1200');

現(xiàn)在我們查詢一下,通過EXPLAIN PARTITION命令發(fā)現(xiàn)SQL優(yōu)化器只需搜對應(yīng)的區(qū),不會搜索所有分區(qū)

mysql支持分區(qū)嗎

如果sql語句有問題,那么會走所有區(qū)。會很危險。所以分區(qū)表后,select語句必須走分區(qū)鍵。

mysql支持分區(qū)嗎

以下3種不是太常用,就一筆帶過了。

LIST分區(qū)

LIST分區(qū)和RANGE分區(qū)很相似,只是分區(qū)列的值是離散的,不是連續(xù)的。LIST分區(qū)使用VALUES IN,因為每個分區(qū)的值是離散的,因此只能定義值。

HASH分區(qū)

說到哈希,那么目的很明顯了,將數(shù)據(jù)均勻的分布到預(yù)先定義的各個分區(qū)中,保證每個分區(qū)的數(shù)量大致相同。

KEY分區(qū)

KEY分區(qū)和HASH分區(qū)相似,不同之處在于HASH分區(qū)使用用戶定義的函數(shù)進行分區(qū),KEY分區(qū)使用數(shù)據(jù)庫提供的函數(shù)進行分區(qū)。

分區(qū)和性能

一項技術(shù),不是用了就一定帶來益處。比如顯式鎖功能比內(nèi)置鎖強大,你沒玩好可能導(dǎo)致很不好的情況。分區(qū)也是一樣,不是啟動了分區(qū)數(shù)據(jù)庫就會運行的更快,分區(qū)可能會給某些sql語句性能提高,但是分區(qū)主要用于數(shù)據(jù)庫高可用性的管理。

數(shù)據(jù)庫應(yīng)用分為2類,一類是OLTP(在線事務(wù)處理),一類是OLAP(在線分析處理)。對于OLAP應(yīng)用分區(qū)的確可以很好的提高查詢性能,因為一般分析都需要返回大量的數(shù)據(jù),如果按時間分區(qū),比如一個月用戶行為等數(shù)據(jù),則只需掃描響應(yīng)的分區(qū)即可。在OLTP應(yīng)用中,分區(qū)更加要小心,通常不會獲取一張大表的10%的數(shù)據(jù),大部分是通過索引返回幾條數(shù)據(jù)即可。

比如一張表1000w數(shù)據(jù)量,如果一句select語句走輔助索引,但是沒有走分區(qū)鍵。那么結(jié)果會很尷尬。如果1000w的B+樹的高度是3,現(xiàn)在有10個分區(qū)。那么不是要(3+3)*10次的邏輯IO?(3次聚集索引,3次輔助索引,10個分區(qū))。所以在OLTP應(yīng)用中請小心使用分區(qū)表。

在日常開發(fā)中,如果想查看sql語句的分區(qū)查詢結(jié)果可以使用explain partitions + select sql來獲取,partitions標(biāo)識走了哪幾個分區(qū)。

mysql> explain partitions select * from TxnList where startTime>'2016-08-25 00:00:00' and startTime<'2016-08-25 23:59:00';  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
| id | select_type | table             | partitions | type | possible_keys | key  | key_len | ref  | rows  | Extra       |  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
|  1 | SIMPLE      | ClientActionTrack | p20160825  | ALL  | NULL          | NULL | NULL    | NULL | 33868 | Using where |  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
1 row in set (0.00 sec)

注:

1.MySQL Workbench下添加分區(qū)的截圖

mysql支持分區(qū)嗎

2. Table has no partition for value 12

在12月的某一天,我查看了生產(chǎn)的日志文件,忽然發(fā)現(xiàn)系統(tǒng)一直在報錯:Table has no partition for value 12。仔細(xì)檢查分區(qū)sql發(fā)現(xiàn)分區(qū)的時候用的是less than

mysql支持分區(qū)嗎

也就是說我在注釋1截圖里面的分區(qū)是不包括12月的區(qū)的。執(zhí)行以下命令增加分區(qū):

ALTER TABLE table_name ADD PARTITION (PARTITION p_12 VALUES LESS THAN (13));

如果沒有進行適當(dāng)?shù)奶幚恚瑢箦e。所以在進行 RANGE 分區(qū)時,要思考這種情況。一般情況下,就時在最后添加一個 MAXVALUE 分區(qū),如下:

PARTITION p_max VALUES LESS THAN MAXVALUE

到此,關(guān)于“mysql支持分區(qū)嗎”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當(dāng)前題目:mysql支持分區(qū)嗎
URL分享:http://weahome.cn/article/gdiiei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部