2017-08-03 137 views
0

我已經看到,在cassandra上執行範圍查詢的最佳方法是使用CLUSTERING KEY。但是我需要做一些除CLUSTERING KEY列以外的範圍查詢。Cassandra範圍查詢:二級索引vs未索引Colum

我看,我們可以做到這一點使用上允許過濾的任何列。但是,如果我在該列上創建二級索引,是否有任何性能優勢?

+0

性能將吸**與**允許過濾*和*二級索引。如果性能是您真正關心的事情,那麼您需要將數據複製到查詢表中,其中主鍵定義旨在支持您的範圍查詢。 – Aaron

回答

1

看一看這個鏈接: https://www.datastax.com/dev/blog/allow-filtering-explained-2

ALLOW FILTERING選項允許你告訴卡桑德拉,這是確定,一旦從磁盤加載行執行內存中的數據進行過濾。因此,我們可以使用它來通過聚類列進行搜索,而無需指定先前的聚類列。但是我們不能在非集羣列上使用它。

請參閱下面的博客示例架構。使用ALLOW FILTERING不允許我們按作者列進行過濾,除非我們將其作爲索引,然後不需要ALLOW FILTERING選項。

cqlsh:test> SELECT * FROM blogs WHERE author = 'john' ALLOW FILTERING; 
Bad Request: No indexed columns present in by-columns clause with Equal operator 
cqlsh:test> 

cqlsh:test> CREATE INDEX authors ON blogs (author); 

cqlsh:test> SELECT * FROM blogs WHERE author = 'john'; 
(0 rows) 
cqlsh:test> SELECT * FROM blogs WHERE author = 'john' ALLOW FILTERING; 
(0 rows) 
+0

但是,RANGE QUERY仍然需要允許過濾,即使它被編入索引。對 ? –

+0

我剛做了一個實驗。 Cassandra允許在未編制索引的列上進行RANGE查詢。只有範圍查詢。 –