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) 编辑 收藏 举报