Quelqu'un aurait-il une idée pour optimiser le code la la requête
ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais
une exécution en moins de 3 secondes.
J'ai 3 tables
Pop4 contient les titres des tâches
POP6 contient les tâches
POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres,
des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres:
- qui sont directement de la responsabilité du service "2"
- ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.*
FROM POP4
WHERE POP4.pop4_id In
( SELECT pop4_id
FROM POP6
WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10
WHERE
POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2')
Or POP6.T1 = '2' Or POP6.T2 = '2'
Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2'
OR POP4.T3='2' OR POP4.T4='2'
ORDER BY POP4.pop4_id;
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gafish
Bonjour,
Juste une petite remarque au passage, est-ce qu'il n'aurait pas été plus simple au lieu de faire quatre champs trimestres T1,T2... de faire un champ numéro du trimestre et un champ numéro de service. Car là du coup tu es obligé de regarder dans tes quatres champs trimestres dans chaque table.
Arnaud
"didier Piron" a écrit dans le message de news:
Bonjour,
Quelqu'un aurait-il une idée pour optimiser le code la la requête ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais une exécution en moins de 3 secondes.
J'ai 3 tables Pop4 contient les titres des tâches POP6 contient les tâches POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres, des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres: - qui sont directement de la responsabilité du service "2" - ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.* FROM POP4 WHERE POP4.pop4_id In ( SELECT pop4_id FROM POP6 WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10 WHERE POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2') Or POP6.T1 = '2' Or POP6.T2 = '2' Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2' OR POP4.T3='2' OR POP4.T4='2' ORDER BY POP4.pop4_id;
Didier
Bonjour,
Juste une petite remarque au passage, est-ce qu'il n'aurait pas été plus
simple au lieu de faire quatre champs trimestres T1,T2... de faire un champ
numéro du trimestre et un champ numéro de service. Car là du coup tu es
obligé de regarder dans tes quatres champs trimestres dans chaque table.
Arnaud
"didier Piron" <Didier.Piron@ksz-bcss.fgov.be> a écrit dans le message de
news: 4ac39cb6.0410260135.2f104542@posting.google.com...
Bonjour,
Quelqu'un aurait-il une idée pour optimiser le code la la requête
ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais
une exécution en moins de 3 secondes.
J'ai 3 tables
Pop4 contient les titres des tâches
POP6 contient les tâches
POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres,
des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres:
- qui sont directement de la responsabilité du service "2"
- ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.*
FROM POP4
WHERE POP4.pop4_id In
( SELECT pop4_id
FROM POP6
WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10
WHERE
POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2')
Or POP6.T1 = '2' Or POP6.T2 = '2'
Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2'
OR POP4.T3='2' OR POP4.T4='2'
ORDER BY POP4.pop4_id;
Juste une petite remarque au passage, est-ce qu'il n'aurait pas été plus simple au lieu de faire quatre champs trimestres T1,T2... de faire un champ numéro du trimestre et un champ numéro de service. Car là du coup tu es obligé de regarder dans tes quatres champs trimestres dans chaque table.
Arnaud
"didier Piron" a écrit dans le message de news:
Bonjour,
Quelqu'un aurait-il une idée pour optimiser le code la la requête ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais une exécution en moins de 3 secondes.
J'ai 3 tables Pop4 contient les titres des tâches POP6 contient les tâches POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres, des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres: - qui sont directement de la responsabilité du service "2" - ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.* FROM POP4 WHERE POP4.pop4_id In ( SELECT pop4_id FROM POP6 WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10 WHERE POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2') Or POP6.T1 = '2' Or POP6.T2 = '2' Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2' OR POP4.T3='2' OR POP4.T4='2' ORDER BY POP4.pop4_id;
Didier
Sylvain Lafontaine
Première idée: qui vous a montré d'utiliser des IN à la place des Join habituelles?
Deuxième idée: les premières opérations d'optimisation prennent d'abord place dans la définition des structures des tables et des index.
Troisième idée: apprenez les ShowPlan de SQL-Server.
Quatrième idée et non la moindre: achetez-vous un bon livre sur l'optimisation de SQL-Server.
S. L.
"didier Piron" wrote in message news:
Bonjour,
Quelqu'un aurait-il une idée pour optimiser le code la la requête ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais une exécution en moins de 3 secondes.
J'ai 3 tables Pop4 contient les titres des tâches POP6 contient les tâches POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres, des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres: - qui sont directement de la responsabilité du service "2" - ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.* FROM POP4 WHERE POP4.pop4_id In ( SELECT pop4_id FROM POP6 WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10 WHERE POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2') Or POP6.T1 = '2' Or POP6.T2 = '2' Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2' OR POP4.T3='2' OR POP4.T4='2' ORDER BY POP4.pop4_id;
Didier
Première idée: qui vous a montré d'utiliser des IN à la place des Join
habituelles?
Deuxième idée: les premières opérations d'optimisation prennent d'abord
place dans la définition des structures des tables et des index.
Troisième idée: apprenez les ShowPlan de SQL-Server.
Quatrième idée et non la moindre: achetez-vous un bon livre sur
l'optimisation de SQL-Server.
S. L.
"didier Piron" <Didier.Piron@ksz-bcss.fgov.be> wrote in message
news:4ac39cb6.0410260135.2f104542@posting.google.com...
Bonjour,
Quelqu'un aurait-il une idée pour optimiser le code la la requête
ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais
une exécution en moins de 3 secondes.
J'ai 3 tables
Pop4 contient les titres des tâches
POP6 contient les tâches
POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres,
des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres:
- qui sont directement de la responsabilité du service "2"
- ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.*
FROM POP4
WHERE POP4.pop4_id In
( SELECT pop4_id
FROM POP6
WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10
WHERE
POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2')
Or POP6.T1 = '2' Or POP6.T2 = '2'
Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2'
OR POP4.T3='2' OR POP4.T4='2'
ORDER BY POP4.pop4_id;
Première idée: qui vous a montré d'utiliser des IN à la place des Join habituelles?
Deuxième idée: les premières opérations d'optimisation prennent d'abord place dans la définition des structures des tables et des index.
Troisième idée: apprenez les ShowPlan de SQL-Server.
Quatrième idée et non la moindre: achetez-vous un bon livre sur l'optimisation de SQL-Server.
S. L.
"didier Piron" wrote in message news:
Bonjour,
Quelqu'un aurait-il une idée pour optimiser le code la la requête ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais une exécution en moins de 3 secondes.
J'ai 3 tables Pop4 contient les titres des tâches POP6 contient les tâches POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres, des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres: - qui sont directement de la responsabilité du service "2" - ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.* FROM POP4 WHERE POP4.pop4_id In ( SELECT pop4_id FROM POP6 WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10 WHERE POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2') Or POP6.T1 = '2' Or POP6.T2 = '2' Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2' OR POP4.T3='2' OR POP4.T4='2' ORDER BY POP4.pop4_id;
Didier
Didier.Piron
Non! Toujours pour une question de performance car si tu procèdes de telle manière, tu dois réaliser 8 requètes ( 4 Left join UNION 4 right join) pour remettre tes trimestres côte à côte.
Didier
"Gafish" wrote in message news:<#...
Bonjour,
Juste une petite remarque au passage, est-ce qu'il n'aurait pas été plus simple au lieu de faire quatre champs trimestres T1,T2... de faire un champ numéro du trimestre et un champ numéro de service. Car là du coup tu es obligé de regarder dans tes quatres champs trimestres dans chaque table.
Arnaud
"didier Piron" a écrit dans le message de news:
Bonjour,
Quelqu'un aurait-il une idée pour optimiser le code la la requête ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais une exécution en moins de 3 secondes.
J'ai 3 tables Pop4 contient les titres des tâches POP6 contient les tâches POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres, des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres: - qui sont directement de la responsabilité du service "2" - ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.* FROM POP4 WHERE POP4.pop4_id In ( SELECT pop4_id FROM POP6 WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10 WHERE POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2') Or POP6.T1 = '2' Or POP6.T2 = '2' Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2' OR POP4.T3='2' OR POP4.T4='2' ORDER BY POP4.pop4_id;
Didier
Non! Toujours pour une question de performance car si tu procèdes de
telle manière, tu dois réaliser 8 requètes ( 4 Left join UNION 4
right join) pour remettre tes trimestres côte à côte.
Didier
"Gafish" <---gafish@free.fr----nospam> wrote in message news:<#YLC3B0uEHA.2624@TK2MSFTNGP11.phx.gbl>...
Bonjour,
Juste une petite remarque au passage, est-ce qu'il n'aurait pas été plus
simple au lieu de faire quatre champs trimestres T1,T2... de faire un champ
numéro du trimestre et un champ numéro de service. Car là du coup tu es
obligé de regarder dans tes quatres champs trimestres dans chaque table.
Arnaud
"didier Piron" <Didier.Piron@ksz-bcss.fgov.be> a écrit dans le message de
news: 4ac39cb6.0410260135.2f104542@posting.google.com...
Bonjour,
Quelqu'un aurait-il une idée pour optimiser le code la la requête
ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais
une exécution en moins de 3 secondes.
J'ai 3 tables
Pop4 contient les titres des tâches
POP6 contient les tâches
POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres,
des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres:
- qui sont directement de la responsabilité du service "2"
- ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.*
FROM POP4
WHERE POP4.pop4_id In
( SELECT pop4_id
FROM POP6
WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10
WHERE
POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2')
Or POP6.T1 = '2' Or POP6.T2 = '2'
Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2'
OR POP4.T3='2' OR POP4.T4='2'
ORDER BY POP4.pop4_id;
Non! Toujours pour une question de performance car si tu procèdes de telle manière, tu dois réaliser 8 requètes ( 4 Left join UNION 4 right join) pour remettre tes trimestres côte à côte.
Didier
"Gafish" wrote in message news:<#...
Bonjour,
Juste une petite remarque au passage, est-ce qu'il n'aurait pas été plus simple au lieu de faire quatre champs trimestres T1,T2... de faire un champ numéro du trimestre et un champ numéro de service. Car là du coup tu es obligé de regarder dans tes quatres champs trimestres dans chaque table.
Arnaud
"didier Piron" a écrit dans le message de news:
Bonjour,
Quelqu'un aurait-il une idée pour optimiser le code la la requête ci-dessous. Son exécution prend plus de 15 secondes et je souhaiterais une exécution en moins de 3 secondes.
J'ai 3 tables Pop4 contient les titres des tâches POP6 contient les tâches POP10 contient les sous-tâches
T1, T2 , T3 et T4 représentent les services responsables des titres, des tâches ou sous-tâches pour chaque trimestre.
Je souhaite réaliser une requête qui reprend les titres: - qui sont directement de la responsabilité du service "2" - ou dont une tâche ou une sous-tâche est responsable du service "2".
La requête doit être en écriture ce qui exclu l'utilisation de l'Union
SELECT POP4.* FROM POP4 WHERE POP4.pop4_id In ( SELECT pop4_id FROM POP6 WHERE POP6.pop6_id In (SELECT pop6_id FROM POP10 WHERE POP10.T1='2' OR
POP10.T2='2' OR
POP10.T3='2' OR
POP10.T4='2') Or POP6.T1 = '2' Or POP6.T2 = '2' Or POP6.T3 = '2' Or POP6.T4 = '2' )
OR POP4.T1='2' OR POP4.T2='2' OR POP4.T3='2' OR POP4.T4='2' ORDER BY POP4.pop4_id;