Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/03/2011, 13h09   #1
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Par défaut Différences de performances deux requêtes

Bonjour, pour une fois c'est moi qui ai une question...
Sous SQL SERVER 2008 R2:
Mon soucis n'en est pas vraiment un mais un cas que je ne saurais expliquer:
Voici deux requetes (simplifiées) à priori identiques:
Code :
1
2
3
4
DECLARE @value VARCHAR(50)=dbo.FN_TRANSFORM_FOR_SEARCH('refer') 
SELECT TOP 20 * FROM dbo.ITEM_SEARCH WHERE VALUE LIKE( '%'+@value+'%')-->10ms 
 
SELECT TOP 20 * FROM dbo.ITEM_SEARCH WHERE VALUE LIKE('%'+dbo.FN_TRANSFORM_FOR_SEARCH(@value)+'%') -> 2,5 secondes
Même plans d’exécutions...(voir fichiers joints) sauf un tri a priori peu coûteux, même nombre d'IO.



Précision: FN_TRANSFORM_FOR_SEARCH est une fonction scalaire dérivée de celle de SQL PRO:
http://blog.developpez.com/sqlpro/p7...ction-de-corr/
Images attachées
Type de fichier : png Requetes2.png (33,9 Ko, 2 affichages)
Type de fichier : png Requetes1.png (33,0 Ko, 2 affichages)
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h14   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Ta fonction est-elle déterministe (et reconnue comme tel par SQL Server ) ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h31   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Tu as raison c'est exactement çà.
La requête postée est appelée dans une fonction table... et impossible de repasser dans une SP.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h41   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
ôtes moi d'un doute...

pour la deuxième, tu fais bien
Code SQL :
1
2
 
DECLARE @value VARCHAR(50)=('refer')

c'est ce que je suppose, puisque tu dis qu'elles sont quasi identiques...

-----

qu'est ce-que ça donne si tu declares ta fonction :
Code :
1
2
 
WITH SCHEMABINDING
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h44   #5
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Pardon cela peut prêter à confusion en effet:
Première requête:
Code :
1
2
DECLARE @value VARCHAR(50)=dbo.FN_TRANSFORM_FOR_SEARCH('refer') 
SELECT TOP 20 * FROM dbo.ITEM_SEARCH WHERE VALUE LIKE( '%'+@value+'%')-->10ms
Deuxième requête :
Code :
SELECT TOP 20 * FROM dbo.ITEM_SEARCH WHERE VALUE LIKE('%'+dbo.FN_TRANSFORM_FOR_SEARCH(@value)+'%') --> 2,5 secondes
@value étant dans le second cas le paramètre d'entrée de ma fonction TABLE.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h50   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Cela fonctionne un grand merci à toi... j'avais déclaré with schemabinding sur la fonction appelée dans FN_TRANSFORM_FOR_SEARCH mais pas FN_TRANSFORM_FOR_SEARCH elle même.

Merci pour ton aide
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 15h01   #7
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
de rien
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h52.


 
 
 
 
Partenaires

Hébergement Web