GBase8s 复合索引(一)

简单索引是基于一个列或者函数创建的索引,与之相对应的是复合索引。复合索引也叫组合索引,即索引包含两个或者更多的列。GBase8s的复合索引最多支持16个索引列,列的总和大小要小于390 bytes。

复合索引示例如下:

create index ix_items on items(stock_num,manu_code);

复合索引的示例图如下:

采用复合索引可以减少索引的个数,增强索引的唯一性,同时可以提高基于多列组合的连接查询性能。例如,索引ix_items可以提高如下查询语句的性能:

select * from items where stock_num=2 and manu_code='HSK';

同时,也可以使用该索引进行如下查询:

select * from items where stock_num=2;

在创建复合索引时,我们需要考虑列的顺序,应该是从最常用的列到最不常用的列的顺序,从列的区分度由高到低的顺序。

(1)需要考虑在应用中使用的SQL语句的情况,即哪些谓词(也就是where条件使用的列)出现的次数最多。

(2)需要考虑列的区分度,列的区分度即列中所有不同值的数量。一般把区分度高的列放在前面,把区分度低的列放在后面。假设有A,B两列,A的区分度为100000,而B的区分度为10000,那么不考虑其他因素,建议在创建复合索引时使用(A,B)。

在如上两个条件出现冲突的情况下,需要考虑应用中所偏重的查询SQL的情况以及实际的测试性能结果,来确定索引列的顺序。如上例中,A的区分度为100000,B的区分度为10000,假设有50%的SQL语句只使用了B列的查询,40%的使用了A,B列,那么建议创建为(B,A)顺序。此时,若应用对只查询A列的性能要求较高,那么需要考虑在A上创建一个单一索引。

针对区分度相差不大的情况,需要根据实际测试结果来确定索引列的顺序。详情见后续的GBase8s 复合索引(二)。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值