|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Jérôme Ingénieur développement logiciels Inscription : juillet 2007 Messages : 109 ![]() |
Bonjour à tous,
je dois trouver dans une table "clients" l'ensemble des correspondances existants à partir de données saisies sur un écran (n° tel, code_postal, etc). Comme les données qui alimentent cette table viennent de plusieurs applications (+/- récente) les règles de saisies ne sont hélas pas toutes les mêmes et je dois mettre suffisamment d'intelligence dans ma recherche de correspondances pour satisfaire la majorité des cas sans plomber les perfs. Ma table contient près de 2 millions d'enregistrements (ce qui n'aide pas). Exemple : Trouver les correspondances à partir d'un numéro de téléphone saisi. En saisissant l'un des numéros suivants, remonter les correspondances des clients avec un numéro dans la liste suivante. 0123456789 01.23.45.67.89 01/23/45/67/89 01 23 45 67 89 01-23-45-67-89 0033123456789 Si possible également : +33(0)123456789 J'ai essayer avec la fonction scalaire suivante en utilisant replace en enlevant les caractères suivants : Code :
Est il possible d'utiliser les expressions régulières en SQL uniquement ? Les perfs avec cette méthode sont... catastrophiques. Une petite aide ? Une orientation ? Je suis preneur de tout. Merci à vous. |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Bonsoir,
2 possibilités : - Les objets OLE Automation - Les fonctions SQL CLR ++ |
|
00
|
|
|
#3 |
|
Membre Expert
![]() |
Comment faites vous votre requêtes?
Le principe est de formater votre paramètre de recherche avant de lancer celle-ci?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() |
|
|
00
|
|
|
#5 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Citation:
Idéalement, il faudrait ajouter des contraintes sur ce type de colonne (numéro de téléphone, ...) afin d'en unifier le format. Si cela engendre trop de modifications coté applications, vous pouvez peut être prévoir une fonction (éventuellement CLR) pour reformater les numéros saisis... à placer dans des triggers INSERT/UPDATE. Si vous voulez néanmoins conserver les numéros tels qu'ils ont été saisis, vous pouvez aussi ajouter une colonne calculée persistante que vous pouvez indexer. |
|
|
|
00
|
|
|
#6 | ||||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
A partir de la fonction que j'ai donné ici, on peut écrire : Code :
J'espère que vous n'êtes pas dans un cadre international, parce que sinon c'est plus compliqué : il vous faudra stocker les expressions des standards internationaux dans une petite table, et faire la comparaison. Normalement néanmoins, ce genre de corrections devrait être fait et vérifié au niveau de l'application Il suffit ensuite de s'en servir pour faire une colonne calculée : Code :
Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||||
|
00
|
|
|
#7 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
C'est assez marrant car c'est un exemple que je donne dans mon cours d'optimisation à Orsys... En gros avec un REGEX on est à plus d'un millions de fois moins rapide sur un ensemble de ligne pas si délirant, par rapport à la colonne calculée persistante associée à une fonction de nettoyage.
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#8 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
Mettons qu'on ait quelque chose de plus compliqué à faire : on implémente une fonction CLR, dont on se sert pour spécifier une colonne calculée que l'on indexe (pas obligé de la persister après tout !). Qu'en penses-tu ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() |
Citation:
J'ai récemment refait un lot d'import de fichier plat en passant de 15 heures à... 20 secondes-> passage d'une approche full code client ADO.NET (vous auriez appriécié Frédéric ) en simple requète ensembliste.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
10
|
|
|
#10 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com