下面给出了3个表的CQL。 两者都具有相同的列结构,但设置PRIMARY KEY的区别。
tab1:无复合主键
CREATE TABLE tab1
(
key1 text,
key2 text,
key3 text,
key4 text,
data1 text,
data2 text,
data3 int,
PRIMARY KEY(key1,key2,key3,key4));
tab2:(key1,key2)形成复合主键
CREATE TABLE tab2
(
key1 text,
key2 text,
key3 text,
key4 int,
data1 text,
data2 text,
data3 text,
PRIMARY KEY((key1,key2),key3,key4));
tab3:(key1,key2,key3)形成复合主键
CREATE TABLE tab3
(
key1 text,
key2 text,
key3 text,
key4 int,
data1 text,
data2 text,
data3 text,
PRIMARY KEY((key1,key2,key3),key4));
在查询value1,value2时,value3已知,key4被指定为范围。 示例CQL查询,
select data1,data2,data3 from tab3 where key1='value1' and key2='value2' and key3='value3' and key4 > 1000 and key4 < 1000000 ;
key4可能有大约50,000条记录。
哪种TABLE设计更好?
哪种设计具有更好的读/写性能?
答案 0 :(得分:1)
如果您需要通过key4支持范围查询,那么它需要是一个聚类列,以便排除tab1。由于您始终为key3指定了确切的值,因此无需将其设置为群集列,因此tab3是比tab2更好的选择。保留分区键中的key3将使数据在集群中更均匀地分区。