2012-05-05 17 views
1

は、私はかなり大きな表(1 000 000 +レコード)を持つiOSアプリケーションでのSQLiteのiOS 5+問題

のiOS 5でのSQLiteとの奇妙な問題があります。 私はテーブルから約20 000のレコードを取得するための簡単なクエリを持っていますし、ORDER BYステートメントで結果をソートしています。このようなもの:

SELECT table2Field,table3Field,table4Field,table5Field,probability,impact 
FROM table1 
    INNER JOIN table2 ON id2=table1_id2 
    INNER JOIN table3 ON id3=table1_id3 
    INNER JOIN table4 ON id4=table1_id4 
    INNER JOIN table5 ON id5=table1_id5 
WHERE country_id = 0 AND category_id = 0 
ORDER BY table2Field, table3Field, table4Field, ABS(impact) DESC 

これは約2〜3秒で動作します。しかし、iOS 5の場合、それはより細かく動作します。 私はこの問題の根本原因を特定しようとしていましたが、成功しませんでした。 ORDER BYステートメントをクエリから削除すると、すべてうまく動作します。

データを手動でソートする方が良いソリューションはありますか?

ありがとう、 Artem。

答えて

1

iOS 5の新しいバージョンのSQLiteは、iOS 4のバージョンよりも効率性の低いクエリプランを選択した可能性が高いです。各バージョンでEXPLAIN QUERY PLANを使用すると、明らかな違いがあるかどうかを確認できます。おそらく、以前のバージョンでは、それ以降のバージョンでは使用されていないインデックスが使用されていました。

また、ANALYZEを使用してクエリプランナーに情報を提供し、EXPLAIN QUERY PLANをもう一度試してみることもできます。

インデックスを追加/変更すると、ORDER BYクエリに役立つことがあります。

+0

回答ありがとうございます。 インデックスを追加/変更しようとしましたが、残念ながら結果はありません。 問題の根本原因を特定するためにEXPLAIN QUERY PLANを使用しようとします。 –