Firebirdデータベース(FB2.1)からDDL情報を取得するための汎用コードがあります。一般的なSQLを最適化してDDL情報を取得する方法
SELECT * FROM MyTable where 'c' <> 'c'
このコードは変更できません。実際には、問題があれば、レポートビルダー10の内部にあります。
実際、私のデータベースの一部のテーブルは大量に埋まってしまい(> 1Mレコード)、そのクエリの実行には時間がかかりすぎます。
私は、それは明らかにそのインデックスを使用し、非常に迅速に実行されます
SELECT * FROM MyTable where SomeIndexedField = SomeImpossibleValue
実行しようとします。
これは不可能なマッチャーであり、何らかの最適化を行い、各行に対してテストするのを避けることがデータベースには難しいことではありません。
検索を最適化するためにFirebirdデータベースを作成する方法はありますか?
<>で状態を削除する必要があります。レポート作成者がこの条件を挿入する理由はわかりません。 「索引を避ける」または「自然スキャンを使用する」のチェックマークがあります。これはFirebirdではなく、レポートビルダーの質問です。 –
DDLのみを取得するための条件が含まれており、データはまったくありません。 1 <> 1、1 = 0、常に偽になるものなどがあります。事実、他のデータベースはそれを最適化し、FBは最適化しません。 –
私は参照してください。私はこの文脈でDDL単語の使い方に間違っていました。実際、FirebirdにはPREPAREステージがあり、クエリ実行なしでフィールドとパラメータに関するすべての情報を受け取ることができます。レポートビルダーはそれについて何も知らないと思われます。答えはまだNOですが、Firebirdはこの無駄なクエリを最適化しません。 –