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   winter-loo  阅读(10)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示