2014-11-01 38 views
0

我有一個寬行表列卡桑德拉寬行每列作爲複合鍵

page_id int, user_id int, session_tid timeuuid and end_time timestamp

與分區鍵= user_id

我需要做多次查詢在桌子上,一些基於在一列和一些基於另一個 - 事實證明,我有where條款在每列的案件

由於卡桑德拉不允許我在非我使用where子句索引,非關鍵列,是否可以,如果我使所有的列我的組合鍵? (目前所有,但end_time柱已經複合鍵,與user_id爲分區鍵)

回答

3

使所有列作爲主鍵不會讓你執行where條件,在你想的方式每列的一部分。

爲了一個簡單的例子,如果你創建這樣一個主鍵

PK(key1, key2, key3, key4) 

不會能夠像

select * from mytable where key2 = 'xyz'; 

進行查詢,因爲規則是,你必須到按照鍵的順序創建一個「multiple-where」條件。

where所以有效的查詢有以下幾種:

select * from mytable where key1 = 'xyz' and key2 = 'abc'; 
select * from mytable where key1 = 'xyz' and key2 = 'abc' and key3 = 11; 
select * from mytable where key2 = 'xyz' and key2 = 'abc' and key3 = 11 and key4 = 2014; 

你可以要求keyN僅提供keyN-1

HTH, 卡羅

+0

感謝您的答案 - 是的,我只是想通出。然而從性能的角度來看,如果我有一個有n列的寬行表,其中1個作爲分隔鍵,n-2行作爲複合鍵和1個正常值col,那麼我應該注意哪些性能影響? (我意識到一個寬行需要駐留在同一個分區,但我不希望col會增長到幾十萬) – touchaponk 2014-11-02 12:39:13