Ich habe einige SQL-Abfragen, die meine iPhone App verlangsamen.Wie sqlite Abfrage mit Daten & substr optimieren?
Ich habe 2 Muster, die ich in meiner App wiederholen. Die erste ist mit substr: (. Dieser Lauf für die mayority des Alphabets ist für eine Kontaktliste)
SELECT Id FROM [Table] WHERE UPPER(substr(Name,1,1))='A' ORDER BY Name"
Der andere komplex mit Datum ist:
SELECT Id,customerCode,
case
when DueDate>=datetime('now','-100 years') AND DueDate<=datetime('now','-1 days') then 'Past due'
when DueDate<datetime('now') then 'Today'
when DueDate>=datetime('now') AND DueDate<=datetime('now','15 days') then '15'
when DueDate>=datetime('now','16 days') AND DueDate<=datetime('now','30 days') then '30'
when DueDate>=datetime('now','31 days') AND DueDate<=datetime('now','45 days') then '45'
when DueDate>=datetime('now','46 days') AND DueDate<=datetime('now','60 days') then '60'
when DueDate>=datetime('now','61 days') AND DueDate<=datetime('now','90 days') then '90'
when DueDate>=datetime('now','91 days') then '> 90'
end As Key,
COUNT(*) As Total, TimeStamp
FROM debt
GROUP BY customerCode,
case
when DueDate>=datetime('now','-100 years') AND DueDate<=datetime('now','-1 days') then '-1'
when DueDate<datetime('now') then 'Today'
when DueDate>=datetime('now') AND DueDate<=datetime('now','15 days') then '15'
when DueDate>=datetime('now','16 days') AND DueDate<=datetime('now','30 days') then '30'
when DueDate>=datetime('now','31 days') AND DueDate<=datetime('now','45 days') then '45'
when DueDate>=datetime('now','46 days') AND DueDate<=datetime('now','60 days') then '60'
when DueDate>=datetime('now','61 days') AND DueDate<=datetime('now','90 days') then '90'
when DueDate>=datetime('now','91 days') then '> 90'
end
In In beiden Fällen habe ich Index für das Datum & das Varchar-Feld.
Der 1. Lauf ok im Simulator und 11 Sekunden in dem iPod touch nimmt 2 GEN
Die zweite Abfrage ist im iPhone-Simulator (3 sec) & 1 min in dem Gerät zu langsam. Die Daten verwenden das ISO-Datumsformular.
Ich habe tothth eine Cache-Tabelle erstellen (und trigers für die Updates. Die Daten sind live und der Benutzer kann es ändern) für die Daten, aber frage mich, ob es einen besseren Weg gibt.
Mit der LIKE die Abfrage verbringen 2 Sekunden weniger. – mamcx