[SQLite] Warum kennt es nicht LIMIT in UPDATE und DELETE?
-
Mahlzeit.
SQLite kennt LIMIT nur in SELECT. Arbeiten mit MySQL unter PHP zeigten mir das es extrem Scriptzeit verkürzt, wenn ich der UPDATE und DELETE ein "LIMIT 1" anhänge, da er sonst die komplette fette Datenbank durchsucht hat, ob die Bedingung noch wo erfüllt wird.
Ist hierfür SQLite irgendwie optimiert oder warum lässt man solche Performanceschraube einfach weg?
http://www.sqlite.org/lang_delete.html
http://www.sqlite.org/lang_update.html
http://www.sqlite.org/lang_select.html
-
Wenn Du mit Primärschlüsseln arbeitest und Indizes verwendest, dann geht das auch schnell ohne LIMIT
-
Natürlich arbeitet man damit, aber es kann auch mal passieren das DELETE mit einer Spalte machst, die eben kein Index ist und in MySQL ist egal ob Indexe löscht, er geht trotzdem ganze DB durch. Das behaupte ich jetzt mal da ich in der Regel nur anhand von Primärschlüsseln lösche und gealtigen Speedup bekommen habe, seitdem ich mit LIMIT 1 arbeite.
-
Kann ich mir kaum vorstellen. Sooo schrottig ist MySql denn nun wieder auch nicht...
Generell ist es aber so, dass es ein Fehler in Datenbank-Design ist, wenn du einzelne Datensätze löscht und die Datenbank dafür einen Full-Table-Scan machen muss.
Natürlich unterstützt in dem Fall ein Limit die Faulheit des Entwicklers, aber wirklich nützlich ist es nicht. Benutze einen Primärschlüssel und lösche über diesen.
-
MySQL ist für seine konzeptionell bedenklichen und proprietären Erweiterungen bekannt. Zum Glück orientieren sich wenigstens andere nach dem SQL-Standard.