2012-05-05 5 views
1

je question étrange avec SQLite sur iOS 5.SQLite iOS 5+ question

En application iOS je assez grande table (1 000 000 + dossiers). J'ai une requête simple pour extraire environ 20 000 enregistrements de la table, puis je trier le résultat via l'instruction ORDER BY. Quelque chose comme ceci:

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 

Sur iOS 4 ce travail autour 2-3 secondes. Cependant sur l'iOS 5 ça marche plus que des minutes. J'essayais d'identifier la cause première de ce problème, mais je n'ai pas réussi. Fait intéressant est que si je supprime instruction ORDER BY de la requête tout fonctionne très bien.

Quelqu'un at-il une meilleure solution, puis le tri des données manuellement?

Merci, Artem.

Répondre

1

Il est probable que la nouvelle version de SQLite dans iOS 5 ait simplement choisi un plan de requête moins efficace que la version d'iOS 4. Vous pouvez utiliser EXPLAIN QUERY PLAN dans chacune des versions pour voir s'il existe des différences évidentes. Peut-être que la version antérieure utilise un index qui n'est pas utilisé par la version ultérieure.

Vous pouvez également essayer d'utiliser ANALYZE pour donner au planificateur de requêtes de meilleures informations et essayer à nouveau EXPLAIN QUERY PLAN. Parfois, ajouter/modifier un index aidera les requêtes ORDER BY.

+0

Merci pour votre réponse. J'essayais d'ajouter/modifier des index, mais malheureusement aucun résultat. Je vais essayer d'utiliser EXPLAIN QUERY PLAN pour identifier la cause première du problème. –