cassandra——可以预料的查询,如果你的查询条件有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现
2017-01-19 12:11
861 查看
cassandra的索引查询和排序
转自:http://zhaoyanblog.com/archives/499.htmlcassandra的索引查询和排序
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); |
1 | CREATE INDEX ON test(a) X |
12 | SELECT * FROM test WHERE e=1; //是可以 SELECT * FROM test WHERE e>1; //就不行了。 |
例如:
1 | SELECT * FROM test WHERE e=1 AND m>2 ALLOW FILTERING; |
第二:排序
cassandra也是支持排序的,order by。 当然它的排序也是有条件的,
第一:必须有第一主键的=号查询。cassandra的第一主键是决定记录分布在哪台机器上,也就是说cassandra只支持单台机器上的记录排序。
第二:那就是只能根据第二、三、四…主键进行有序的,相同的排序。
第三:不能有索引查询
12 | 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; |
12 | 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; //不能有索引。 |
这个我在《cassandra2.0 如何实现分页查询》文章中提到过。所以你使用b desc, c asc 或者b asc,c desc 去排序,cassandra是比较为难的。
当然这个默认存储排序方式,是可以在建表的时候指定的。
12 | 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
相关文章推荐
- sql查询时,根据特定的条件给表的某一个字段赋值
- 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询
- 如果一个类通过继承Thread来实现多线程的话,则不适合多个线程共享资源,而通过实现Runnable就可以做到这一点
- 在页面中,我们经常看到,一个button按钮,如果属标点击,就会触发一个窗口的显示,如果二次点击并可以隐藏,那么如何通过JAVA配合html来实现这一功能呢?
- [转]给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少个兄弟单词
- 在一个大型B2C项目中,如果存在大量重复查询,可以通过使用ThreadLocal来解决
- 根据一个表中的字段属性名称作为查询条件来批量修改该表中数据
- ElasticSearh更新nested字段(Array数组)。怎么根据查询条件(query)复制一个(index)到新的Index how to update by query a nested fields data for elasticsearch
- 创建存储过程,以部门编号为参数返回该部门的人数及平均工资(返回一个值可以通过函数来实现,但如果要返回多个值,需要使用out或in out模式参数实现)
- oracle数据库查询通过一个待查询字段的值组装不同的条件
- MySQL数据库优化总结如果索引多个字段,第一个字段要是经常作为查询条件的。如果只有第二个字段作为查询条件,这个索引不会起到作用;
- Oracle中如何根据一个字段查询是否有符合条件的记录
- 给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少个兄弟单词。
- 请问有没有人知道可不可以根据已经编译好的exe(这里具体指窗体),通过什么工具可以看到它里面的某一个控件的事件里面的代码(比如timer的tick)。
- Common实现任何Form定位查询转到当前Form种过滤符合条件的数据区域
- 通过Ajax+jquery实现的动态增加一组查询条件的实例
- linq 查询 实现如果条件为空则加where,否则不加Where的效果
- 给数据库字段添加注释,并且可以通过sql语句查询
- ASP.NET文件下载简单实现(也可以通过直接读取数据库 大字段文件,如oracle 中的bolg,long raw 等大字段文件)
- 一个数据库查询方法(可以动态设置查询参数,设置查询条件),很巧妙的组合sql语句