2

私は、SQLite ストアで永続化された Core Data を使用している iOS 7 アプリに取り組んでいます。私は読書のために最適化しようとしています。

このブログ投稿のアドバイスに従っています。これは、スロー クエリの where 句と order by 句の両方で使用される列を含む複合インデックスを使用することを提案しています。ただし、私のクエリの 1 つは、サブクエリ内にある Core Data 管理の主キーに基づいて where 句を使用して選択しています。

SELECT 0, t0.Z_PK, t0.Z_OPT, ... FROM ZMODEL t0 
WHERE t0.Z_PK IN (SELECT * FROM _Z_intarray0)  
ORDER BY t0.ZTITLE LIMIT 99999

一時テーブルであるため、SQLite にクエリを正確に説明してもらうことはできません_Z_intarray0(またはそれでしょうか?) が、(潜在的に) データベースからいくつかのガイダンスを取得するために、いくつかの値を置き換えることができます。

explain query plan SELECT 0, t0.Z_PK, t0.Z_OPT, ... FROM ZMODEL t0 
                   WHERE  t0.Z_PK IN (1,2,3)  
                   ORDER BY t0.ZTITLE LIMIT 99999;
0|0|0|SEARCH TABLE ZMODEL AS t0 USING INTEGER PRIMARY KEY (rowid=?) (~3 rows)
0|0|0|EXECUTE LIST SUBQUERY 1
0|0|0|USE TEMP B-TREE FOR ORDER BY

データベース レベルでは、order by 句の一時インデックスを生成しないように、主キーとタイトル列にインデックスを追加できると思います。ただし、Core Data は主キーを管理しており、オブジェクト レベルの属性ではないため、複数列のインデックスを追加することはできません。

インデックスまたは別のソリューションを使用してこのクエリを高速化する方法はありますか?

4

0 に答える 0