It uses the index...

cqlsh:dev> tracing on;
Now tracing requests.
cqlsh:dev> 
cqlsh:dev> 
cqlsh:dev> SELECT id, flag from foo WHERE TOKEN(id) > '-9939393' AND TOKEN(id) 
<= '0' AND flag=true;

Tracing session: 128cab90-6982-11e2-8cd1-51eaa232562e

 activity                                           | timestamp    | source    
| source_elapsed
----------------------------------------------------+--------------+-----------+----------------
                                 execute_cql3_query | 08:36:55,244 | 127.0.0.1 
|              0
                                  Parsing statement | 08:36:55,244 | 127.0.0.1 
|            600
                                 Peparing statement | 08:36:55,245 | 127.0.0.1 
|           1408
                      Determining replicas to query | 08:36:55,246 | 127.0.0.1 
|           1924
 Executing indexed scan for (max(-9939393), max(0)] | 08:36:55,247 | 127.0.0.1 
|           2956
 Executing single-partition query on foo.flag_index | 08:36:55,247 | 127.0.0.1 
|           3192
                       Acquiring sstable references | 08:36:55,247 | 127.0.0.1 
|           3220
                          Merging memtable contents | 08:36:55,247 | 127.0.0.1 
|           3265
                       Scanned 0 rows and matched 0 | 08:36:55,247 | 127.0.0.1 
|           3396
                                   Request complete | 08:36:55,247 | 127.0.0.1 
|           3644


It reads from the secondary index and discards keys that are outside of the 
token range. 

Cheers
 

-----------------
Aaron Morton
Freelance Cassandra Developer
New Zealand

@aaronmorton
http://www.thelastpickle.com

On 28/01/2013, at 4:24 PM, Mike Sample <mike.sam...@gmail.com> wrote:

> Does the following FAQ entry hold even when the partion key is also 
> constrained in the query (by token())?
> 
> http://wiki.apache.org/cassandra/SecondaryIndexes:
> ==
>    Q: How does choice of Consistency Level affect cluster availability when 
> using secondary indexes?
> 
>    A: Because secondary indexes are distributed, you must have CL nodes 
> available for all token ranges in the cluster in order to complete a query. 
> For example, with RF = 3, when two out of three consecutive nodes in the ring 
> are unavailable, all secondary index queries at CL = QUORUM will fail, 
> however secondary index queries at CL = ONE will succeed. This is true 
> regardless of cluster size."
> ==
> 
> For example:
> 
> CREATE TABLE foo (
>     id uuid,  
>     seq_num bigint, 
>     flag boolean, 
>     some_other_data blob,
>     PRIMARY KEY (id,seq_num) 
> );
> 
> CREATE INDEX flag_index ON foo (flag);
> 
> SELECT id, flag from foo WHERE TOKEN(id) > '-9939393' AND TOKEN(id) <= '0' 
> AND flag=true;
> 
> Would the above query with LOCAL_QUORUM succeed given the following? IE is 
> the token range used first trim node selection?
> 
> * the cluster has 18 nodes
> * foo is in a keyspace with a replication factor of 3 for that data center
> * 2 nodes in one of the replication groups are down
> * the token range in the query is not in the range of the down nodes
> 
> 
> Thanks in advance!

Reply via email to