2014-06-30 40 views
0

我有一個表如在卡桑德拉2.0.8如下:爲什麼cassandra/cql限制在未編制索引的列上使用where子句?

CREATE TABLE EMP( EMPID INT, DEPTID INT, first_name的文本, 姓氏文本, PRIMARY KEY(EMPID,DEPTID) )

當我嘗試搜索:「select * from emp where first_name ='John';」

CQL殼說:
「錯誤的請求:沒有索引列呈現逐列條款與平等的經營者」

我搜索了這個問題,它說,添加輔助指數爲列「FIRST_NAME每一個地方」。

但我需要知道爲什麼該列需要被編入索引的確切原因? 我唯一能想出來的就是表演。 任何其他原因?

回答

1

Cassandra不支持按任意列進行搜索。這是因爲它會涉及掃描所有不支持的行。

這些數據在內部組織成某人可以與HashMap [X,SortedMap [Y,Z]]進行比較的東西。外部映射的關鍵是一個分區鍵值,內部映射的鍵是所有聚集列值的一種連接和一些常規列的名稱。

除非您在某列上有索引,否則您需要提供要用查詢收集的數據的完整(首選)或部分路徑。因此,您應該設計模式,以便查詢包含集羣列中的主鍵值和一些範圍。

你可以閱讀什麼是允許的和什麼不是here

相關問題