2017-12-26 15 views
-1

私はms-access-2010のsqlクエリでIIF(expression , truePart , falsePart)を使用しました。私も別の演算子を見つけましたNZ(expression,falsePart).アクセスSQLのIIFとNz演算子

どの演算子が時間と空間の複雑さの面でより速いのか、どのように知りたいのですか?

例10kレコードを持つテーブルからレコードをフェッチしたい場合。上記の演算子から使用する方が良いですか?

+3

これらはそれぞれ目的が異なるため、実際のデータに基づいてテストを実行します。さらに、NzはAccess VBAにのみ存在します。 – Gustav

答えて

1

非常に大きな反復を除いて、それぞれの実行はほぼ同じです。

クエリでは、私が目立つと思ういくつかの問題があります。 私にとって、返されるデータ型と関数のネイティブステータスです。

即時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であることが絶対に必要です。必ずしも共通の問題ではありませんが、考慮事項です。