我的 Cassandra 数据库中有一张桌子。
CREATE TABLE table (
pk uuid,
status int,
location text,
type text,
id text,
updatedtimestamp timestamp,
PRIMARY KEY (pk)
);
CREATE INDEX tablelocation ON table (location);
CREATE INDEX tabletype ON table (type);
CREATE INDEX tableid ON table (id);
CREATE INDEX tableupdatedtimestamp ON table (updatedtimestamp);
我运行的查询是:
Select * from table
where location='A1'
and type='T1'
and status=001
and id='NA'
allow filtering;
Cassandra 需要超过 5 秒的时间来为该查询返回 4000 条记录。我已经在所有这些列上都有二级索引。根据 DBA,问题是id='NA'
有条件的。此条件为真的行太多。
但是,这种情况是由于业务用例而存在的,如果没有其他机制来过滤该值,就无法删除该条件。
我正在考虑创建一个包含所有 4 列的新索引。但是,我担心它会妨碍写入性能。状态栏会非常频繁地更新。
我们可以做些什么来调整这个查询的性能吗?