当尝试执行此查询时:
select race_name from sport_app.month_category_runner where race_type = 'URBAN RACE 10K' and club = 'CORNELLA ATLETIC';
我得到以下错误:
Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING
这是一个练习,所以我不允许使用ALLOW FILTERING
所以我用这种方式创建了两个索引:create index raceTypeIndex ON sport_app.month_category_runner(race_type);
create index clubIndex ON sport_app.month_category_runner(club);
但我一直得到相同的错误,我错过了什么,还是有一个替代方案?
表结构:
CREATE TABLE month_category_runner (month text,
category text,
runner_id text,
club text,
race_name text,
race_type text,
race_date timestamp,
total_runners int,
net_time time,
PRIMARY KEY (month, category, runner_id, race_name, net_time));
注意,如果您添加了"ALLOW FILTERING"该查询将在Cassandra集群的所有节点上运行,并且会对所有节点产生很大的影响。
建议添加分区作为查询的条件,以允许查询只在需要的节点上执行。
的例子:
select race_name from month_category_runner where month = 'may' and club = 'CORNELLA athletic ';
select race_name from month_category_runner where month = 'may' and race_type = 'URBAN RACE 10K';
select race_name from month_category_runner where month = 'may' and race_type = 'URBAN RACE 10K' and club = 'CORNELLA athletic '允许过滤;
主键由(month, category, runner_id, race_name, net_time)组成,列month是分区,因此该列必须位于查询过滤器上,如示例所示。
如果您希望使用两个不在主键中的列执行查询,尽管存在索引列,则需要使用ALLOW filter,这会对性能产生影响;
另一个选项是创建一个新表,其中主键包含这些列。