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');
标签:
lightdb
posted on 2024-01-22 11:58 winter-loo 阅读(10) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通