2010-04-29 5 views
2

Une table avec des lignes de ~ 100k.SQLite FTS3 performances incompatibles

SELECT word FROM entries WHERE word MATCH '"chicken *"'; 
17 results in 46ms 
SELECT word FROM entries WHERE word MATCH '"chicken f*"'; 
2 results in 5793ms 

Pourquoi une telle chute?

+0

Voici une petite lecture pour augmenter la réponse de s01ipsist: http://www.sqlite.org/fts3.html#tokenizer – Tim

Répondre

2

Le caractère générique dans "poulet *" peut effectivement être ignoré car il correspond à n'importe quel jeton. La recherche est une recherche simple dans l'index inverse. Le caractère générique dans "chicken f *" doit trouver toutes les entrées avec des mots commençant par f, qui contiennent également le mot chicken. C'est naturellement plus compliqué et plus lent.

Questions connexes