1

iOS 5 の SQLite に奇妙な問題があります。

iOS アプリケーションには、かなり大きなテーブル (1 000 000 + レコード) があります。テーブルから約 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

iOS 4 では、これは約 2 ~ 3 秒で機能します。ただし、iOS 5 では、1 分以上動作します。この問題の根本原因を特定しようとしましたが、成功しませんでした。興味深い事実は、クエリから ORDER BY ステートメントを削除すると、すべて正常に機能することです。

データを手動でソートするよりも良い解決策はありますか?

ありがとう、アルテム。

4

1 に答える 1

1

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

ANALYZEを使用してクエリ プランナーにより良い情報を提供し、EXPLAIN QUERY PLAN を再試行することもできます。

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

于 2012-05-05T17:23:13.807 に答える