Can I create a secondary index on multiple columns in cassandra

user1955409 picture user1955409 · Nov 20, 2013 · Viewed 14.6k times · Source

Can I create a secondary index on multiple columns in cassandra? like can I do

create index my_composite_index on my_column_family (id,name)

CQL throws error

:2:Bad Request: line 1:73 mismatched input ',' expecting ')'

Answer

Aaronontheweb picture Aaronontheweb · Nov 20, 2013

Alex's answer is correct but I thought I would add some additional input.

Cassandra secondary indexes (2i) are really meant for low-cardinality fields, i.e. things that are not unique to each entity / row.

If you have a table of 250 million US citizens, using a secondary index to track which state they're in is a perfect use case for 2i. Using a secondary index to track their social security number is not - it would create enormous performance problems for both reads and writes. You'd be better off creating your own index column family in the second scenario.

2i are not replicated and have to be created locally in each node, so there's a substantial amount of work involved in rebuilding them if you have to replace a node or add a new one.

Personally, I use 2i for filtering item results all sorted on the same CQL row (i.e. all items have the same partition key) - it's quite performant in that use case.