创建表并插入数据
CREATE TABLE TEST_DM.T1(C1 INT,C2 INT);
INSERT INTO TEST_DM.T1 VALUES (1,1);
INSERT INTO TEST_DM.T1 VALUES (2,1);
INSERT INTO TEST_DM.T1 VALUES (3,1);
INSERT INTO TEST_DM.T1 VALUES (1,2);
INSERT INTO TEST_DM.T1 VALUES (2,2);
INSERT INTO TEST_DM.T1 VALUES (3,2);
INSERT INTO TEST_DM.T1 VALUES (1,3);
INSERT INTO TEST_DM.T1 VALUES (2,3);
INSERT INTO TEST_DM.T1 VALUES (3,3);
CREATE INDEX idx_c1 on TEST_DM.T1(c1);
CREATE TABLE TEST_DM.T2(C3 INT primary key, C4 varchar(8));
INSERT INTO TEST_DM.T2 VALUES (1,'x');
INSERT INTO TEST_DM.T2 VALUES (2,'y');
INSERT INTO TEST_DM.T2 VALUES (3,'z');
CSCN 全表扫描
explain SELECT C1, C2
FROM TEST_DM.T1;
SSCN 二级索引扫描
explain SELECT C1
FROM TEST_DM.T1;
SSEK 二级索引范围扫描
explain SELECT C1
FROM TEST_DM.T1
WHERE C1=1;
CSEK 聚簇索引范围扫描
EXPLAIN
SELECT C3
FROM TEST_DM.T2
WHERE C3=1;
BLUK 回表:根据二级索引查询到rowid,再回到主键索引取出数据
EXPLAIN
SELECT *
FROM TEST_DM.T1
WHERE C1=1;
一些特殊的例子
rowid上并没有聚簇索引,所以走全表扫描 CSCN
EXPLAIN
SELECT C3
FROM TEST_DM.T2
WHERE ROWID=3;
建表后,没有创建主键(聚簇)索引前,表里会生成rowid为主键的聚簇索引 CSEK
EXPLAIN
SELECT *
FROM TEST_DM.T1
WHERE ROWID = 1;
重要的理解:主键是聚簇索引的一种,创建聚簇索引时,主键的索引会变非聚簇索引
DROP TABLE IF EXISTS TEST_DM.T1;
CREATE TABLE TEST_DM.T1(C1 INT,C2 INT);
INSERT INTO TEST_DM.T1 VALUES (1,1),(2,1),(3,1),(1,2),(2,2),(3,2),(1,3),(2,3),(3,3);
手动创建聚簇索引
create cluster index i_index2 on TEST_DM.T1(c2);
当表有主键的时候,可以创建聚簇索引
DROP TABLE IF EXISTS TEST_DM.T1;
CREATE TABLE TEST_DM.T1(C1 INT primary key,C2 INT);
INSERT INTO TEST_DM.T1 VALUES (1,1),(2,1),(3,1);
create cluster index i_index2 on TEST_DM.T1(c2);
手动创建聚簇索引时,主键会变成非聚簇主键
更多资讯请上达梦技术社区了解:https://eco.dameng.com