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

歡迎訪問 生活随笔!

生活随笔

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

数据库

java mysql 分区表_mysql分区表

發布時間:2023/12/18 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java mysql 分区表_mysql分区表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對用戶來說,分區表是一個獨立的邏輯表,但是底層由多個物理子表組成。實現分區的代碼實際上是對一組底層表的句柄對象的封裝。

mysql在創建表時使用PARTITION BY子句定義每個分區存放的數據。在執行查詢的時候,優化器會根據分區定義過濾那些沒有我們需要數據的分區,這樣查詢就無須掃描所有分區——只需要查詢包含需要數據的分區就可以了。

分區的一個主要目的是將數據按照一個較粗的粒度分在不同的表中,這樣做可以將相關的數據放在一起,另外,如果想一次批量刪除整個分區的數據也會變得很方便。

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

1.表非常大以至于無法全部都放在內存中,或者只在表的最后部分有熱點數據,其他均是歷史數據。

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

3.分區表的數據可以分布在不同的物理設備上,從而高效地利用多個硬件設備。

4.可以使用分區表來避免某些特殊的瓶頸,例如InnoDB的單個索引的互斥訪問,ext3文件系統的inode鎖競爭等。

5.如果需要,還可以備份和恢復獨立的分區,這在非常大的數據集的場景下效果非常好。

分區表本身也有一些限制,下面是其中比較重要的幾點:

1.一個表最多只能有1024個分區。

2.在mysql5.1中,分區表達式必須是整數,或者是返回整數的表達式。在mysql5.5中,某些場景中可以直接使用列進行分區。

3.如果分區字段中有主鍵或者唯一索引的列,那么所有主鍵列和唯一索引列都必須包含進來。

4.分區表中無法使用外鍵約束。

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

select查詢

當查詢一個分區表的時候,分區層先打開并鎖住所有的底層表,優化器先判斷是否可以過濾部分分區,然后再調用對應的存儲引擎接口訪問各個分區的數據。

insert操作

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

delete操作

當刪除一條記錄時,分區層先打開并鎖住所有的底層表,然后確定數據對應的分區,最后對相應底層表進行刪除操作。

update操作

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

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

總結

以上是生活随笔為你收集整理的java mysql 分区表_mysql分区表的全部內容,希望文章能夠幫你解決所遇到的問題。

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