Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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 14/10/2011, 11h27   #1
Invité de passage
 
Homme
Consultant MySQL
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant MySQL
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 1
Points : 1
Par défaut Index, dates et fonctions sur dates

Bonjour à tous,

Je vous pose mon problème :
J'ai deux tables v et w avec un champ date dans chacune d'entre elle, ces tables contiennent des centaines de milliers d'enregistrements.
J'ai un index sur chacun de ces champs date des deux tables.
MAIS dans une de mes requêtes j'ai quelque chose du type
Code :
WHERE ABS(DATEDIFF(w.datew,v.datev))<3
La requete est grandement ralentie par cette opération, puisque aucun index n'est utilisé avec le DATEDIFF...

Auriez-vous une solution? D'avance merci
MatMerz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 11h46   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Je ne crois pas qu'il y en ait !
Il faut bien que le SGBD fasse l'opération sur chaque couple de dates et aucun index ne sera utile.

Par contre, pourquoi chercher la valeur absolue de la différence entre deux dates ?
Citation:
Envoyé par Doc MySQL
DATEDIFF() retourne le nombre de jours
...
Seule la partie DATE est utilisée dans le calcul
Le nombre de jours retourné par la fonction est toujours un entier !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 12h08   #3
Invité de passage
 
Homme
Consultant MySQL
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant MySQL
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 1
Points : 1
J'utilise ABS car je ne sais pas toujours laquelle est la plus grande des deux, et pour donc obtenir un résultat positif quoi qu'il arrive, ce n'est pas une fonction de truncate ou de round

J'osais espérer un semblant d'index possible avec deux champs sur deux tables différentes, mais bon, peut-être dans la version 8 de MySQL
MatMerz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 12h10   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Si, il y en a, il faut rendre le prédicat "cherchable" (sargable en anglais)

En l’occurrence une fonction appliqué à vos deux colonnes empêche la sargeablbilité.

Et comme MySQL est nul en matière d'optimisation, il ne sait pas transformer ce précidat en prédicat sargeable !

A vous de le faire.

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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 12h18   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par MatMerz Voir le message
et pour donc obtenir un résultat positif quoi qu'il arrive, ce n'est pas une fonction de truncate ou de round
Au temps pour moi, j'ai confondu !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h16.


 
 
 
 
Partenaires

Hébergement Web