> Derzeit halte ich in einem Array 5 Millionen Datensätze vor und dieses Array > durchsuche ich > mit indexof. Die Suche dauert max. 125ms.
Probiere erstmal was Anderes: Indexof schaut sich ja blind jedes Array-Element, vom ersten zum letzten, an, und vergleicht es mit dem Suchtext, bis es einen gefunden hat. Das könnte man evtl. schon enorm beschleunigen, indem du das Array sortierst und dann eine Binärsuche durchführst: Dazu schaust du dann zwar selbst die Elemente an und vergleichst sie mit Strcomp oder =, aber du gehst nicht von 0 bis N-1 (N = Anzahl), sondern fängst in der Mitte des Arrays an und vergleichst mit "if suchtext < array(i)" - wenn true, dann ist der Suchtext "kleiner" als das Element in der Mitte des sortierten Arrays, d.h. du brauchst schonmal die untere Hälfte nicht mehr weiter durchsuchen. Also machst du weiter mit der oberen Hälfte, und schaust dort ebenfalls wieder in die Mitte des verbliebenen Hälfte. Und so weiter, bis der zu durchsuchende Teilbereich nur noch aus einem Element besteht, was also der Treffer ist. Ach so - das klappt natürlich nur, wenn du Datensätze suchst, die mit dem suchstring _beginnen_. Aber das tust du ja, wenn du indexof verwendest, also sollte obige Optimierung auf jeden Fall helfen. Nur das einmalige Sortieren wird eine Weile brauchen, dafür sind die Suchen dann viel viel schneller. Nun zu SQLite: Es kann schneller sein, denn wenn du dort dann angibst, dass die DB einen "index" für diese Array-Elemente anlegen soll, baut es evtl. genau so eine sortierte Liste auf, die es dann binär durchsuchen kann, wie oben beschrieben. Der (kleine) Nachteil ist, daß sqlite dafür mehr disk-speicher braucht, weil es nicht nur die Daten sondern auch den Index getrennt speichert. -- Thomas Tempelmann, http://www.tempel.org/ Follow me on Twitter: http://twitter.com/#!/tempelorg