2011-09-12 12 views
1

私たちのコードはCで書かれており、DBはInformixです。 ESQLプログラムでコード最適化を行っており、次のクエリが見つかりました。どちらが速いですか?col =?またはcol =?またはcol =? OR "where in(?、?、?)in in informix(.ec/esql)?

[テーブル] OR COL =? ...

where句の列数が動的に準備されます。我々はwhere句の準備を止め、更新を行い、そして戻って残りの準備を開始するために、上位の数のチェックを持っています。 UPPER_MARKが

"30" である場合(> = UPPER_MARKがwhere_parameter_count)
__
をupdate__実行__ clean_and_continue。/*

UPDATE [TABLE] SET [PRIMARY KEYのCOLUMN] = [NEW KEY] COLのIn ... */__

私たちは、WHEREを置き換えるものと考える。.. ORで再び準備を開始(?、?...)

これは「どこか」より速いでしょうか?

+1

これを試したときに何を見つけましたか?どちらの方が速くなるか、あるいは何の違いも生じない可能性があります。 –

+0

サンプルデータセット(100万レコード以上、OR句30個を含む場所)でテストした場合、違いはありません。 –

+1

それは私を驚かさない。バージョンの変更のように、データベースサーバを大きく変更した場合、それは異なる可能性があります。また、コードを片方向に最適化すれば、大きな変化は別の方法がより速いことを意味する可能性があります。 –

答えて

3

どちらの構文でも、クエリオプティマイザに関する限り、同じことが解決されます。違いはありません。

でリストアプローチの唯一の利点は、つまり

x IN (a, b) AND y = z 

x = a OR x = b AND y = z 

、追加の述語を追加すると、ロジックを変更しないということですがませ同じものです。

+0

しかし、その違いは、括弧で囲まれたOR項を囲むことによって(些細なことで)解決されます。 –

+0

もちろん、もちろんあります。しかし、動的に生成されたコードについて言及するとき、私はそれを作るのが有益な区別だと思います。 – RET

+0

ありがとうございます。実際のコードは単なる「OR」であり、上記の例を理解しています。サンプルデータのテストでも大きな時間差はありませんでした。チームメンバーの1人は、「AND」と「OR」はインデックスのビット操作であり、より高速になることが期待されています。あなたはそれについて何か考えを持っていますか? –

関連する問題