cassandra的索引查询和排序

转自:http://zhaoyanblog.com/archives/499.html

cassandra的索引查询和排序

cassandra的查询虽然很弱,但是它也是支持索引和排序的,当然是简陋的查询,这一切都是为了追求性能的代价,所以要使用cassandra,你不能希望它完全适用你的逻辑,而是把你的逻辑设计的更适合cassandra。

第一:索引查询
cassandra是支持创建二级索引的,索引可以创建在除了第一个主键之外所有的列上,当然有些类型除外,例如集合类型。
例如

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE test(a INT,b INT,c INT,d INT,e INT,m INT,PRIMARY KEY(a,b,c));CREATE INDEX ON test(c);
CREATE INDEX ON test(e);

在第一主键a上创建索引是不可以的:

1
CREATE INDEX ON test(a) X

索引列只可以用=号查询,所以

1
2
SELECT * FROM test WHERE e=1; //是可以
SELECT * FROM test WHERE e>1; //就不行了。

如果你的查询条件里,有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现
例如:

1
SELECT * FROM test WHERE e=1 AND m>2 ALLOW FILTERING;

虽然m字段是非索引非主键字段,但是只要加了ALLOW FILTERING条件,它会先根据e=1查出来,再对结果进行m>2过滤

第二:排序
cassandra也是支持排序的,order by。 当然它的排序也是有条件的,
第一:必须有第一主键的=号查询。cassandra的第一主键是决定记录分布在哪台机器上,也就是说cassandra只支持单台机器上的记录排序。
第二:那就是只能根据第二、三、四…主键进行有序的,相同的排序。
第三:不能有索引查询

1
2
3
4
SELECT * FROM test WHERE a=1 ORDER BY b DESC;
SELECT * FROM test WHERE a=1 ORDER BY b DESC, c DESC;
SELECT * FROM test WHERE a=1 ORDER BY b ASC;
SELECT * FROM test WHERE a=1 ORDER BY b ASC, c ASC;

以上都是可以的。

1
2
3
4
SELECT * FROM test ORDER BY b DESC; //没有第一主键 不行
SELECT * FROM test WHERE a=1 ORDER BY c DESC; //必须以第二主键开始排序
SELECT * FROM test WHERE a=1 ORDER BY b DESC, c ASC; //不是相同的排序。
SELECT * FROM test WHERE e=1 ORDER BY b DESC; //不能有索引。

其实cassandra的任何查询,最后的结果都是有序的,默认的是b asc, c asc,因为它内部就是这样存储的。
这个我在《cassandra2.0 如何实现分页查询》文章中提到过。所以你使用b desc, c asc 或者b asc,c desc 去排序,cassandra是比较为难的。
当然这个默认存储排序方式,是可以在建表的时候指定的。

1
2
3
4
5
6
7
8
9
CREATE TABLE test(a INT,b INT,c INT,d INT,e INT,m INT,PRIMARY KEY(a,b,c))
WITH CLUSTERING ORDER BY (b DESC, c ASC);

除非注明,赵岩的博客文章均为原创,转载请以链接形式标明本文地址
本文地址:http://zhaoyanblog.com/archives/499.html

转载于:https://www.cnblogs.com/bonelee/p/6306079.html

cassandra——可以预料的查询,如果你的查询条件有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现...相关推荐

  1. 【mybatis】mybatis自定义动态字段查询,mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段...

    mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段 先看一下 怎么实现动态的自定义字段查询: 例如: 而field 就是数据表中的某一个字段 String f ...

  2. Oracle提高SQL查询效率where语句条件的先后次序

    (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处 ...

  3. mysql 主键查询性能_MySQL查询性能优化(精)

    MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下 ...

  4. 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化

    25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...

  5. 检索数据_8_查询语句里执行条件判断

    查询语句里执行条件判断 需求描述 需求:查询雇员表emp里的员工名称.工资.工资分类状态.这里的工资分类状态按照以下规则显示:如果工资小于等于2000则显示UNDERPAID(即报酬比较低的),如果工 ...

  6. 整型索引查询mysql是不是快点_图解Mysql索引的数据结构!看不懂你来找我

    听说微信搜索<Java鱼仔>会变更强哦! 本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 (一)关于索引 索引是帮助Mysql更加高效获取数据的 ...

  7. MySQL查询与数据库设计 #万能公式 #思维导图 #MySQL查询 #数据库设计规范 #第二部分

    MySQL查询 零.MySQL查询万能公式 一.查询 1)查询表中记录 2)给表取名 3)去重(distinct) 二.条件查询 1)比较运算符 2)逻辑运算符 3)模糊查询 like(用通配符) r ...

  8. mysql索引查询 with_mysql select with in子句不使用索引

    我有一个联系人表,其主键为id.它还有一个辅助索引idx_id_del_user(id,deleted,user_id). 以下查询使用索引,因此非常快 – select id from jts_co ...

  9. MySQL经典四表查询(教师,学生,成绩,课程表)多表查询

    我用的工具:MySQL5.7+SQLyog-11.2.5-0 1.表架构呈现 student(sid,sname,sage,ssex) 学生表 teacher(tid,tname) 教师表 cours ...

最新文章

  1. mysql server远程连接_MySql server:开放mysql远程连接
  2. java接口关于interface关键字
  3. android activity 渐变,关于Android的径向渐变高级编程的实现
  4. 继承Thread 创建多线程的简单实现
  5. linux提权辅助工具(二):linux-exploit-suggester-2.pl
  6. 中国联通官网被发现含木马脚本,可向用户推广色情APP
  7. oracle执行runstats,Oracle编程艺术--配置环境:runstats脚本
  8. SQL server 数据加密
  9. WES7@IIC-China
  10. 周鸿祎:很多人不缺情商智商但缺“胆商”
  11. winform自定义控件无法显示在工具箱中以及显示但使用时出错的解决办法
  12. Unityt涂抹擦除功能
  13. 我玩的王者荣耀(一)——鲁班
  14. 大多数企业数字化转型的真正目的其实只是为了能多裁点人
  15. tesseract-ocr 识别图片中的数字
  16. 2022 版史上最全 Java 八股文,没有任何异议
  17. Status of node rabbit@xxxxx... Error: unable to perform an operation on node ‘rabbit@xxxx
  18. 《统计学》(贾俊平)考研初试完整学习笔记10~14章
  19. 关于python中end函数的使用
  20. iOS 调整UIPageControl圆点大小

热门文章

  1. 滞后超前校正控制器的设计和matlab仿真 静态速度误差系数为10,自控实验六 基于频域的串联校正控制器设置 - GXUZF.COM - 林澈思的茶...
  2. php方案报价单,综合布线设计方案,综合布线报价清单
  3. python一个图画两条曲线_用python建立两个Y轴的XY曲线图方法
  4. java实现窗口透明_java实现窗口透明
  5. 计算机设备布局图,针对不同设备类型创建仪表板布局
  6. mabatisplus怎么给实体类自定义属性_如果你的角色属性可以自定义,你会怎么点?...
  7. 【以太坊】web3.js的1.0版本和0.2.0版本的安装及区别
  8. 保洁阿姨看完都会了!java面向对象编程开发证书
  9. 【Ubuntu入门到精通系列讲解】Ubuntu 图形界面入门
  10. python【蓝桥杯vip练习题库】BASIC-21Sine之舞(递归 递推)