パーティションインデックス

(8.0.27)
https://dev.mysql.com/doc/refman/8.0/ja/partitioning-overview.html

drop table tab1;

create table tab1
( col1   int primary key
, col2   int
, col3   int
, col4   int
)
 partition by range (col1)
 ( partition p1 values less than (0)
 , partition p2 values less than (maxvalue)
 );


-- 1. ローカルパーティションインデックス
create index ind2 on tab1(col2);

-- 2. グローバルパーティションインデックス
→作成不可

-- 3. グローバル非パーティションインデックス
→作成不可

-- 確認
show create table tab1;


パーティショニングはテーブルのすべてのデータおよびインデックスに適用されます。
データだけにパーティション化しインデックスは行わないことはできず (その逆も不可)、
テーブルの一部のみをパーティション化することもできません。

(19c)

drop table tab1 purge;

create table tab1
( col1   int primary key
, col2   int
, col3   int
, col4   int
)
 partition by range (col2)
 ( partition p1 values less than (0)
 , partition p2 values less than (maxvalue)
 );

-- 1. ローカルパーティションインデックス
create index ind2 on tab1(col2) local;

-- 2. グローバルパーティションインデックス
create index ind3 on tab1(col3) global
 partition by range (col3)
 ( partition p31 values less than (1)
 , partition p32 values less than (maxvalue)
 );

-- 3. グローバル非パーティションインデックス
create index ind4 on tab1(col4);

-- 確認
col INDEX_NAME for a15;
col PARTITION_NAME for a15;

select INDEX_NAME,PARTITIONED from user_indexes where table_name = 'TAB1';
select INDEX_NAME,PARTITION_NAME,HIGH_VALUE from user_ind_partitions where INDEX_NAME like 'IND_';

 

(14)

drop table tab1 cascade;

create table tab1
( col1   int primary key
, col2   int
, col3   int
, col4   int
)
partition by range ( col1 )
;

create table tab1p1 partition of tab1 for values from (minvalue) to (0);
create table tab1p2 partition of tab1 for values from (0) to (maxvalue);

-- 1. ローカルパーティションインデックス
create index ind2 on tab1(col2);

-- 2. グローバルパーティションインデックス
→作成不可

-- 3. グローバル非パーティションインデックス
→作成不可

ONLYオプションが指定された場合、再帰処理は行われず、そのインデックスは無効と印付けされます。 


-- 確認
\d+ tab1
\d+ tab1p1
\d+ tab1p2

(2019)

use test
go

drop partition scheme ps1;
drop partition function pf1;

drop partition scheme ps2;
drop partition function pf2;

create partition function pf1(int) as range right for values (0);
create partition scheme ps1 as partition pf1 all to ([primary]);

create partition function pf2(int) as range left  for values (0);
create partition scheme ps2 as partition pf2 all to ([primary]);


drop table tab1;

create table tab1
( col1   int primary key
, col2   int
, col3   int
, col4   int
)
on ps1(col1)
;


-- 1. ローカルパーティションインデックス
create index ind2 on tab1(col2) on ps1(col1);

-- 2. グローバルパーティションインデックス
create index ind3 on tab1(col3) on ps2(col3);

-- 3. グローバル非パーティションインデックス
create index ind4 on tab1(col4) on [primary];


-- 確認

select * from sys.indexes where object_id = object_id('dbo.tab1');

select * from sys.dm_db_partition_stats where object_id = object_id('dbo.tab1');