Scylla DB реализует так называемую « оптимизацию префикса ключа » для вторичных индексов, что исключает фильтрацию, если указана часть первичного ключа.Например, можно выполнить SELECT * FROM A WHERE a = 'a' AND b = 'a' AND d = 'a';
для таблицы A
.
CREATE TABLE A (
a text,
b text,
c text,
d text,
PRIMARY KEY(a,b,c)
);
CREATE INDEX A_index ON A (d);
Но это не сработает, если A.d
является столбцом кластеризации.Например, как в таблице B
ниже.
CREATE TABLE B (
a text,
b text,
c text,
d text,
PRIMARY KEY(a,b,c,d)
);
CREATE INDEX B_index ON B (d);
Приведенный выше запрос SELECT завершается неудачно с ошибкой:
InvalidRequest: Ошибка от сервера: code = 2200 Сообщение [Invalid query]= "Невозможно выполнить этот запрос, так как он может включать фильтрацию данных и, следовательно, может иметь непредсказуемую производительность. Если вы хотите выполнить этот запрос, несмотря на непредсказуемость производительности, используйте ALLOW FILTERING"
ScyllaDB 3.0.1.