私はms-access-2010のsqlクエリでIIF(expression , truePart , falsePart)
を使用しました。私も別の演算子を見つけましたNZ(expression,falsePart).
アクセスSQLのIIFとNz演算子
どの演算子が時間と空間の複雑さの面でより速いのか、どのように知りたいのですか?
例10kレコードを持つテーブルからレコードをフェッチしたい場合。上記の演算子から使用する方が良いですか?
私はms-access-2010のsqlクエリでIIF(expression , truePart , falsePart)
を使用しました。私も別の演算子を見つけましたNZ(expression,falsePart).
アクセスSQLのIIFとNz演算子
どの演算子が時間と空間の複雑さの面でより速いのか、どのように知りたいのですか?
例10kレコードを持つテーブルからレコードをフェッチしたい場合。上記の演算子から使用する方が良いですか?
非常に大きな反復を除いて、それぞれの実行はほぼ同じです。
クエリでは、私が目立つと思ういくつかの問題があります。 私にとって、返されるデータ型と関数のネイティブステータスです。
即時Ifはデータ型を保持します。それだけでなく、それを使ってデータ型を強制することもできます。 Integer backまたはDateが必要な場合は、それを返すパラメータとして渡すことができます。 Nzは、返すことを望むバリアント(Text/String)を返します。
私が言及した他の問題は空き状況です。 Immediate Ifは、Jetの式サービスによって実装されます。それを公開するには、完全なAccess VBAライブラリを読み込む必要はありません。言い換えれば
- あなたは、このような
SELECT * FROM TableName WHERE IIF(FieldName Is Null, 0, FieldName) = 0
としてクエリを作成した場合、あなたはコードからそのクエリを実行することができますが(アクセス接続を必要としない)にアクセスする外部ライブラリ。
Jetが機能を評価します。 (これは特に良いクエリではありません - どちらかの関数を使って実際にはひどいです)。
等価
SELECT * FROM TableName WHERE Nz(FieldName, 0) = 0
は、Nzはアクセスアプリケーションオブジェクトモデルのメンバーであるという事実に依存しています。クエリを実行するAccessであることが絶対に必要です。必ずしも共通の問題ではありませんが、考慮事項です。
これらはそれぞれ目的が異なるため、実際のデータに基づいてテストを実行します。さらに、NzはAccess VBAにのみ存在します。 – Gustav