2008-09-17 8 views
7

J'ai été malade et fatigué Googling la solution pour faire la recherche insensible à la casse sur Sybase ASE (les noms de données/colonne Sybase sont sensibles à la casse). La documentation Sybase dit fièrement qu'il n'y a qu'une seule façon de faire une telle recherche qui utilise les fonctions Upper et Lower, mais l'adage dit, il y a des problèmes de performance. Et croyez-moi, ils ont raison, si votre table a d'énormes données, la performance est si gênante que vous n'allez plus jamais utiliser Upper et Lower. Ma question aux autres développeurs est la suivante: comment vous y prenez-vous?La recherche insensible à la casse sur Sybase

P.S. Ne conseillez pas de changer l'ordre de tri ou de passer à une autre base de données s'il vous plaît, dans les développeurs du monde réel ne contrôlent pas les bases de données.

Répondre

1

Si vous ne pouvez pas modifier l'ordre de tri de la base de données (meilleure option), les index sur les champs de cas inconnus n'aideront pas. Il existe un moyen de le faire et de maintenir les performances si le nombre de champs est gérable. Vous faites une colonne supplémentaire MyFieldLower. Vous utilisez un déclencheur pour garder le champ rempli avec un minuscule de MyField.

Ensuite, la requête est: OÙ MyFieldLower = BAS (@MySearch)

Cela utilisera l'indexation.

3

Essayez de créer un functional index, comme

Create Index INDX_MY_SEARCH on TABLE_NAME(LOWER(@MySearch) 
2

Ajouter une colonne supplémentaire de majuscules ou minuscules dans votre instruction select. Exemple:

select col1, upper(col1) upp_col1 from table1 order by upp_col1 
Questions connexes