そうです、FAQ で説明されているように、唯一の違いがパラメーターの値でない限り、新しい WHERE 句ごとにクエリのコンパイルが必要になります。(これは、where 句で使用可能なフィルターに基づいてプランをコンパイルおよび最適化するためです。) したがって、新しいフィルターを追加すると、別のコンパイルが必要になります。memsql の現在のリリースでは、クエリによっては、選択クエリのコンパイルに 1 秒以上かかる場合があります。
これを回避するための 1 つの回避策は、関心のあるすべての可能な基準を事前に知っている場合、WHERE 句を次のように記述することです。
WHERE (a=1 OR 0) AND (b<5 OR 0) AND (c=3 OR 0)
これはと同等です
WHERE (a=1) AND (b<5) AND (c=3)
もちろん、これらのフィルターは任意の式にすることができます。OR 0 を OR 1 に変更すると、その条件は無視されます。たとえば、b<5 だけを取得するには、次のように記述します。
WHERE (a=1 OR 1) AND (b<5 OR 0) AND (c=3 OR 1)
パラメータのみが変更されるため、追加のコンパイルは必要ありません。ただし、コンパイルされたクエリ プランは実行時にこれらの各句をチェックする必要があり (この回避策で再コンパイルを回避する方法です)、実際に存在するフィルターによって最適なプランが異なる可能性があるため、パフォーマンスが低下する可能性があることに注意してください。