lightdb 允许建表时同时建立索引

背景

在 Mysql 的建表语法中,用户可以使用 index 关键字指定列名作为索引。在 LightDB 24.1 中支持了该语法的部分特性。

用例

-- use default index name
create table foo(a int, index (a));

-- create unique index
create table foo(a int, unique index(a));

-- use custom index name
create table foo(a int, index idx_foo_a(a));

-- index name is the same as table name
--= error in LightDB, warning in mysql
create table foo(a int, index foo(a));

-- order is not important, in middle
create table foo(b int, index (a), a int);

-- use hash
create table foo(a int, index using hash (a));

-- use desc
create table foo(a int, index (a desc));

-- use functional index
create table foo(a varchar(10), index ((ltrim(a))));
insert into foo values('10');
insert into foo values('   10');
set enable_seqscan = off;
set enable_indexscan = on;
explain select a from foo where ltrim(a) = '10';

以下特性不支持,

--=error, lightdb 和 mysql 默认索引名都是大小写无关
create table foo(a int, index a(a), index A(a));

-- 索引有重复列,mysql 不可以,lightdb 可以
create table foo(a int, b int, index(a, a));

-- 跨表相同名称, lightdb 不可以,mysql 可以
create table foo(a int, index a(a));
create table foo2(a int, index a(a));

-- 索引名和表名相同,mysql 可以,lightdb 不可以
create table foo(a int, index foo(a));

-- lightdb 默认支持 hash, mysql 默认不支持 hash
create table foo2(a int, index a(a), index b using hash (a));

-- mysql 中 `cname` 可以省略, lightdb 中不可以
create table foo(a int, b int, constraint cname primary key(a), index (a));

--= error, lightdb 不支持指定索引使用的列名长度
create table foo(a varchar(20), index (a(10)));

--= error, lightdb 不支持索引选项
create table foo(a int, index (a) comment 'not a correct syntax');

posted on 2024-01-22 11:58  winter-loo  阅读(5)  评论(0编辑  收藏  举报

导航