在上一篇文章里 couchbase介绍与实践(一)中,介绍了couchbase与其他NOSQL的比较以及安装方式,接下来说下couchbase里比较重要的概念,索引。
索引
索引在couchbase中十分重要,不像关系型数据库那样,没有索引最多就是查询慢点,在couchbase里不建立索引,连查询操作都做不了。索引主要分成两类,分别是全局二级索引和本地索引。
全局二级索引(Global Secondary Index)
全局二级索引多用于庞大的网络节点,快速执行交互式的处理。
本地索引(Local Index)
本地索引多用于本节点上复杂的逻辑和预处理程序,速度较快,但是在集群有多节点的情况下速度会下降。
一开始我也是一头雾水,因为关系型数据库上是没有这样的概念的,但是结合这张图以及描述,我的理解是这样的:本地索引相当于把索引信息放在每一个节点,当需要查询时,会将每个节点上获取该节点上的索引去查询,最后再将结果汇总在一起。而全局二级索引相当于把索引信息放在一个节点,每次查询只用去查询该节点即可。因此在网络节点多的时候全局二级索引更快。
创建索引
CREATE INDEX index_name ON named_keyspace_ref ( expression1 [ , expression2 ] * )
WHERE filter_expressions
[ USING GSI | VIEW ]
[ WITH { "nodes": [ "node_name" ], "defer_build":true|false , "num_replica": num_replica_num } ];
复制代码
index_name 索引名称 命名规则是A-Z a-z 0-9 # _
named_keyspace_ref 桶的名称 可以定义namespace加keyspace的组合
namespace-name : keyspace-name
复制代码
expression1, expression2, ... , expressionX 用到的参数
USING GSI | VIEW 索引类型 默认是GSI
WITH "nodes":["node_name"] 指定索引保存在哪个节点,若不指定则随机存放
"defer_build":true | false 延迟构建
"num_replica": num_replica_num 索引副本数
例子
CREATE INDEX abv_idx ON `beer-sample`(abv);
复制代码
对beer-sample桶上的abv字段建立了一个叫abv_idx的索引,接下来就可以进行查询
SELECT min(abv), max(abv) FROM `beer-sample`;
复制代码