MySQL按字串hash分割槽 mysql分割槽理論

2021-10-18 22:25:40 字數 3655 閱讀 3512

檢視mysql安裝的引擎

mysql>show engines;

檢視mysql安裝的外掛程式(這裡用於檢視當前mysql是否支援partition)

mysql>show plugins;

不同分割槽對比

分割槽型別 優點 缺點 共性

range 適合與日期型別,支援復合分割槽 有限的分割槽 一般只針對某一列

list 適合與有固定取值的列,支援復合分割槽 有限的分割槽,插入記錄在這一列的值不在list中,則資料丟失 一般只針對某一列

hash 線性hash使得增加、刪除和合併更快捷 線性hash的資料分布不均勻,而一般hash的資料分布較均勻 一般只針對某一列

key 列可以為字元型等其他非int型別 效率較之前低,因為函式複製的程度,(如。md5或sha函式) 一般只針對某一列

海量資料優化2種方法

1、大表拆小表,分表、分割槽,物理的操作

2、sql語句的優化,通過增加索引來調整,但是資料量增大將會導致索引的維護代價增大,邏輯層面提公升

大表拆小表

垂直分表,拆列字段,缺點:破壞表關係,表關聯

水平分表,拆資料行,缺點:php**量維護,邏輯層面困難增加

mysql分割槽

有點類似水平分表,但是它是基於邏輯層面,而不是物理層面,對於程式而言分割槽表還是一張表

mysql5.1的4種分割槽型別

range分割槽:基於屬於乙個給點連續區間的列值,把多行分配給分割槽

list分割槽:類似按range分割槽,區別在於list分割槽是基於列值匹配乙個離散值集合中的某個值來進行選擇,列值是固定值的時候,例如列舉的時候

hash分割槽:基於使用者定義的表示式的返回值來進行選擇的分割槽,該表示式使用將要插入到表中的這些行的列值進行計算,這個函式可以包含mysql中有效的,產生非負整數值得任何表示式,測試使用

key分割槽:類似按hash分割槽,區別在於key分割槽只支援計算一列或多列,且mysql伺服器提供自身的雜湊函式

range分割槽sql

create table emp(

int int not null,

fname varchar(30),

lname varchar(30),

hired date not null default '1970-01-01',

separated date not null default '9999-12-31',

job_code int not null,

store_id int not null 商店id

)--根據商店id時間來設定分割槽

partition by range(store_id)(

partition p0 values less than (6),

partition p1 values less than (11),

partition p2 values less than (16),

partition p3 values less than (21),

create table emp(

int int not null,

fname varchar(30),

lname varchar(30),

hired date not null default '1970-01-01', 入職時間

separated date not null default '9999-12-31', 離職時間

job_code int not null,

store_id int not null

)--根據離職時間來設定分割槽

partition by range(year(separated))(

partition p0 values less than (1991),

partition p1 values less than (1996),

partition p2 values less than (2001),

partition p3 values less than maxvalue,

emp.frm 表結構

emp.par 分割槽表(分了4個分割槽,每乙個分割槽有乙個分割槽資料檔案和乙個分割槽索引檔案)

emp.#p#p0.myd mydata分割槽資料檔案

emp.#p#p0.myi myindex分割槽索引檔案

emp.#p#p1.myd

emp.#p#p1.myi

emp.#p#p2.myd

emp.#p#p2.myi

emp.#p#p3.myd

emp.#p#p3.myi

list分割槽sql

create table emp(

int int not null,

fname varchar(30),

lname varchar(30),

hired date not null default '1970-01-01', 入職時間

separated date not null default '9999-12-31', 離職時間

job_code int not null,

store_id int not null 商店id

)--根據商店id時間來設定分割槽,列舉型別,固定的值

partition by list(store_id)(

partition pnorth values in (3,5,6,9,17),

partition peast values in (1,2,10,11,19,20),

partition pwest values in (4,12,13,14,18),

partition pcenter values l in (7,8,15,16)

emp.frm 表結構

emp.par 分割槽表(分了4個分割槽,每乙個分割槽有乙個分割槽資料檔案和乙個分割槽索引檔案)

emp.#p#pcenteral.mydata分割槽資料檔案

emp.#p#pcenteral.myi myindex分割槽索引檔案

emp.#p#peast.myd

emp.#p#peast.myi

emp.#p#north.myd

emp.#p#north.myi

emp.#p#pwest.myd

emp.#p#pwest.myi

hash分割槽sql

create table emp(

int int not null,

fname varchar(30),

lname varchar(30),

hired date not null default '1970-01-01', 入職時間

separated date not null default '9999-12-31', 離職時間

job_code int not null,

store_id int not null 商店id

)--根據入職時間分割槽,入職時間不同, hash演算法平均分配到不同的分區內

partition by hash(yeah(hired))

partitions 4;

key分割槽

與hash分割槽類似,但它的key可以不是整數,如可以是字串型別,mysql簇(cluster)使用函式md5(來)實現key分割槽;對於使用其他儲存引擎的表,伺服器使用其自己內部的雜湊函式,這些函式與password()一樣的運算法則

Hash 字串 字串雜湊

luo gu luogu luogup 3370 p3370 p337 0如題,給定n個字串 第i個字串長度為mi,字串內包含數字 大小寫字母 請求出n個字串中共有多少個不同的字串。第一行包含乙個整數n,為字串的個數。接下來n行每行包含乙個字串,為所提供的字串。輸出包含一行,包含乙個整數,為不同的字...

mysql 按指定字元拆分字串

sql語句 set str 7654,7698,7782,7788 select substring index substring index str,help topic id 1 1 as numfrom mysql.help topic where help topic id length ...

白兔的字串 字串hash

原題 一道典型的字串hash,至於hash,這裡講的非常好。一開始用map函式一直超時,後來改用unordered map就過了,至於這2個map的區別,這裡講的挺清楚的。之後去查了一下其它方法,發現還有一種方法是手寫map函式 強 指明 大佬 unordered map是跑了600ms,重寫跑了1...