2017-03-21 8 views
2

私はこのようなテーブルを持っています。cassandraの同じパーティションクエリでフィルタリングを許可することのパフォーマンスへの影響

CREATE TABLE posts (
topic text 
country text, 
bookmarked text, 
id uuid, 
PRIMARY KEY (topic,id) 
); 

許可フィルタリングを使用した単一パーティションの最初のクエリ。

select * from posts where topic='cassandra' allow filtering; 

フィルタリングを許可しない単一パーティションでの2番目のクエリ。

select * from posts where topic='cassandra'; 

私の質問は、最初のクエリと2番目のクエリのパフォーマンスの違いは何ですか?単一のパーティションから要求していますが、フィルタリングする前にすべてのパーティションの結果を取得します(フィルタリングを許可)。

ありがとうございました。

答えて

1

フィルタリングを許可すると、パーティションキーを指定せずにクエリを実行できます。しかし、あなたが1つを使用する場合、それは特定のパーティションのみを使用します。

この具体例では違いはありません。

は、上のトレースと私のテストテーブルの上に両方のクエリを実行しました両方の実行計画で単一のパーティションを得た:

Executing single-partition query on table_name 
+0

トレースログをチェックしても、パフォーマンスに影響はなく、確認したかったと思っています。ありがとう。 – Darshan

2

あなたはパーティション・キーを照会するときALLOW FILTERINGを使用する必要はありません。したがって、あなたが言及した2つのクエリでは、パフォーマンスの違いはありません。

Cassandraバージョン3.0以上では、ALLOW FILTERINGを使用して、パーティションキー以外のフィールドを照会することができます。

SELECT * FROM posts where country='Bangladesh'; 

を3.0以下カサンドラバージョンのため、ALLOW FILTERINGは主キーのみで使用できます。たとえば、次のようなクエリを実行することができます。 ALLOW FILTERINGを使用してクエリするのは賢明ではありませんが。 Cassandraがこのクエリを実行できる唯一の方法は、テーブルpostsからすべての行を取得し、次にcountry列に要求された値を持たないものを除外することです。 ALLOW FILTERINGを自己責任で使用する必要があります。

+0

私はフィルタリングを許可する必要はありません。しかし、単にそのパラメータを指定すると、パフォーマンスへの影響を知りたかっただけです。 – Darshan

関連する問題