一下幾種都是本人進過測試的都是向資料庫中加入2000w資料,儲存引擎innodb版本5.7主要對比幾種開啟分割槽,與未開啟分割槽之間的優化【ps:如有不對的地方請大手不吝嗇指教】
1.乙個表最多只能有1024個分割槽
2.如果分割槽欄位中有主鍵或者唯一索引的列,那麼所有主鍵列和唯一索引列都必須包含進來
3.分割槽表無法使用外來鍵約束
4.null值會使分割槽過濾無效
5.所有分割槽必須使用相同的儲存引擎
對於此分割槽我在測試的時候使用=、like、等進行where條件測試對比下來感覺分割槽前後並沒有太大的區分,這地方我也只使用某一分割槽
-- 建立表的時候同時將區域分好
create
table part_tab (
c1 int
default
null
,c2 varchar(30
)default
null
,c3 date
default
null
)engine
=innodb
partition
by range (
year
(c3))(
partition p0 values less than (
1995),
partition p1 values less than (
1996),
partition p2 values less than (
1997),
partition p3 values less than (
1998),
partition p4 values less than (
1999),
partition p5 values less than (
2000),
partition p6 values less than (
2001),
partition p7 values less than (
2002),
partition p8 values less than (
2003),
partition p9 values less than (
2004),
partition p10 values less than (
2010),
partition p11 values less than maxvalue )
;--使用儲存函式進行資料模擬插入
create
procedure load_part_tab(
)begin
declare v int
default0;
while v <
20000000
doinsert
into part_tab
values
(null
,'testing partitions'
,adddate(
'1995-01-01'
,(rand(v)
*36520
) mod 3652))
;set v = v +1;
endwhile
;end
--調取對應的函式
call load_part_tab(
);
對於此分割槽,在測試的時候分完區查詢速度明顯提公升當然這地方我只使用了某一分割槽無論之你用in、=之類的效率還是不錯的
create
table tblist1 (
id int
notnull
, store_id int
)partition
by list(store_id)
(partition a valuesin(
0,1,
5,6)
,partition b valuesin(
2,7,
8),partition c valuesin(
3,9,
10),partition d valuesin(
4,11,
12));
對於此分割槽有乙個奇怪的點,他的分割槽資料都不是連續性的,當然還是沒啥效果,用了與沒用都差別不大
mysql的一些優化
前言 sql優化,是一種概率層面的優化。至於是否實際使用了我們的優化,需要通過explain進行推測。注意 服務層中有sql優化器,可能會影響我們的優化,同時註明 sql的優化前提是有索引 有索引 有索引 in和exists的使用場景 select from a where exists selec...
關於mysql的一些坑
使用create table newtable select from oldtable複製表時並沒有複製主鍵 索引以及自增屬性,要重新設定,即刪除後再加上,且設為auto increment的字段必須設為primary key create table newtable select from o...
一些 Mysql 的優化經驗
一些 mysql 的 優化經驗 從資料庫結構做起 字段型別的定義時遵循以下規則 選用字段長度最小 優先使用定長型 盡可能的定義 not null 數值型字段中避免使用 zerofill 如果要儲存的資料為字串,且可能值已知且有限,優先使用 enum 或 set 索引的優化至關重要 以下如果沒有特殊說...