2009-07-16 8 views
1

La requêtesqlite Optimisation des requêtes

SELECT * FROM Table WHERE Path LIKE 'geo-Africa-Egypt-%' 

peut être optimisée:

SELECT * FROM Table WHERE Path >= 'geo-Africa-Egypt-' AND Path < 'geo-Africa-Egypt-zzz' 

Mais comment peut-être ce fait:

select * from foodDb where Food LIKE '%apples%"; 

comment cela peut être optimisé?

Répondre

0

Cela me surprendrait si c'était plus rapide, mais vous pourriez essayer GLOB au lieu de LIKE et comparer;

SELECT * FROM foodDb WHERE Food GLOB '*apples*'; 
+0

Pas plus rapide. Il en résulte toujours un balayage de table complet. Utilisez EXPLAIN de sqlite pour voir le plan de requête, c'est-à-dire le programme vdbe à exécuter pour une requête. – laalto

1

Une option est une donnée redondante. Si vous recherchez beaucoup de chaînes de caractères fixes au milieu d'une colonne, ajoutez une autre colonne contenant les informations indiquant si une chaîne particulière peut être trouvée dans l'autre colonne. Une autre option, pour les chaînes arbitraires mais encore tokenizable est de créer une table de dictionnaire où vous avez les jetons (par exemple apples) et des références de clé étrangère à la table réelle où se produit le jeton.

En général, sqlite n'est pas très bon pour la recherche en texte intégral.

Questions connexes