2010-07-20 7 views
1

Ma requête doit effectuer une recherche LIKE sur 3 colonnes.Comment améliorer les performances des requêtes SQL Server lors d'un LIKE sur plusieurs colonnes

SELECT * FROM Monkeys 
WHERE [Name] LIKE '%pete%' OR [Desc] LIKE '%pete%' OR [Info] LIKE '%pete%'; 

Je cherche à améliorer les performances de cette requête.

Je ne peux pas utiliser les catalogues de texte intégral, juste des tableaux simples. Il y a environ 200 000 lignes (base de données SQL Server 2008) et cela prend de 3 à 6 secondes.

Quelqu'un a-t-il des conseils?

+2

Vous ne pouvez pas obtenir de bonnes performances lorsque vous utilisez un caractère générique comme le premier caractère que les index ne peuvent pas être utilisés. Cela indique une mauvaise conception que vous ne devriez pas avoir besoin de faire ce type de recherche, et les données ne devraient pas être dans l'une des trois colonnes. – HLGEM

+0

Si vous utilisez un terme de recherche 'LIKE% pete%', vous jetez toutes les chances d'utiliser un index. Vous ne serez pas en mesure d'accélérer une telle requête - à moins d'abandonner le terme de recherche% pete% et d'utiliser autre chose pour effectuer une recherche (ou utiliser la recherche fulltext) –

Répondre

4

Indexation complète/recherche si vous avez des caractères génériques de premier plan.

Aucune quantité d'indexation normale ne vous aidera à accélérer, désolé, qu'il s'agisse de colonnes multiples ou simples avec des caractères génériques.

Votre meilleur meilleur moins pire chance est d'avoir un index composite sur les 3 colonnes et j'espère que l'optimiseur scanne ce plutôt un scan de table, mais franchement je ne l'ai pas essayé moi-même. Et vous ne pouvez probablement pas parce que la largeur combinée de colonne de clé d'index doit être inférieure à 900 octets

Questions connexes