2012-02-21 7 views
1

CoreDataフェッチ要求の一部を最適化する方法を見つけようとしています。私は現在、検索する2つまたは3つのパラメータを持つNSPredicatesを持っています。それらはすべて索引付けされています。CoreDataフェッチ速度はNSPredicateのパラメータ数によって影響を受けますか?

単一のインデックスを検索する方が高速ですが、検索できますか、いくつか検索できますか?また、intに対するインデックスは文字列に対するインデックスより高速ですか?

答えて

2

確実に役立つのは、最も先を識別するレコードを確実に選択することです。たとえば、特定のキー値を持つレコードを2つだけ選択すると、レコードの90%がアクティブで、同時に他のものを選択すると、すべてのアクティブなレコードを選択するよりもはるかに高速です(インデックスを使用できる)。この場合、区別フィールドのインデックスが使用されていることを確認するために、非識別フィールドのインデックスを削除する方が良いでしょう。

また、ステートメントを持つ述語は、ステートメントがないステートメントよりもかなり遅くなります。 整数での選択は、文字列での選択よりも高速ですが、両方のインデックスが付いている場合、その差は小さくなります。

キーの代わりにキーパスを選択すると、パフォーマンスが低下します。 (一例として、私が最近使用し、述語:

product.subgroup.code == %@ 

選択150.000製品グリッチの右もの(0.1秒以内)から、しばらく:150.000製品正しいものでから

product.subgroup.maingroup.code == %@ 

選択約1.5秒

コアデータでは、データモデルエディタで1つのアトリビュートにインデックスを付けることしかできません。実際のSQLデータベースでは、複数のアトリビュートを同時にインデックス化します。 - データ。

実際のデータベースを計測器でテスト(コアデータフェッチ用の計測器を使用)することで、ボトルネックを見つけるのに役立ちます。

+0

インデックスの付いた属性の束がありますか?だから1つだけ本当にインデックスされていますか?これは私の問題の根源かもしれません。 – Slee

+0

これらは個別に索引付けされますが、オプティマイザはfetchRequestごとに1つの索引のみを使用できます – Bjinse

+0

偉大な情報、ありがとう – Slee

関連する問題