Bonjour,
Je me casse la tête depuis 2h sur une optimisation de requête et je ne comprends pas un comportement.
La requête d'origine est :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SELECT count(*) FROM ( SELECT count(*) as c FROM Physicians t0 LEFT JOIN table1 t1 ON t1.Id = t0.Speciality INNER JOIN table2 t2 ON t2.Id = t0.Degree INNER JOIN table3 t3 ON t3.Id = t0.WebSite INNER JOIN table4 t4 ON t4.WebSite = t0.WebSite WHERE t3.DirectoryAndRobotStatus = 1 AND t3.OnlineStatus = 1 AND t3.BlockStatus = 0 GROUP BY t0.Login, t0.Degree, t0.OtherDegree, t0.Firstname, t0.Middlename, t0.Lastname, t4.AddressNumber, t4.AddressStreet, t4.AddressMore, t4.AddressPostCode, t4.AddressCity, t4.Name, t1.Specialist, t3.DNS, t3.OnlineStatus, t3.DirectoryAndRobotStatus, t3.BlockStatus, t2.Label ) as t
Je trouve le même résultat avec cette requête :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 select count(*) from ( SELECT DISTINCT t0.Login, t0.Degree, t0.OtherDegree, t0.Firstname, t0.Middlename, t0.Lastname, t4.AddressNumber, t4.AddressStreet, t4.AddressMore, t4.AddressPostCode, t4.AddressCity, t4.Name, t1.Specialist, t3.DNS, t3.OnlineStatus, t3.DirectoryAndRobotStatus, t3.BlockStatus, t2.Label FROM Physicians t0 LEFT JOIN table1 t1 ON t1.Id = t0.Speciality INNER JOIN table2 t2 ON t2.Id = t0.Degree INNER JOIN table3 t3 ON t3.Id = t0.WebSite INNER JOIN table4 t4 ON t4.WebSite = t0.WebSite WHERE t3.DirectoryAndRobotStatus = 1 AND t3.OnlineStatus = 1 AND t3.BlockStatus = 0 ) as t
Mais pas avec :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT COUNT(DISTINCT t0.Login, t0.Degree, t0.OtherDegree, t0.Firstname, t0.Middlename, t0.Lastname, t4.AddressNumber, t4.AddressStreet, t4.AddressMore, t4.AddressPostCode, t4.AddressCity, t4.Name, t1.Specialist, t3.DNS, t3.OnlineStatus, t3.DirectoryAndRobotStatus, t3.BlockStatus, t2.Label) FROM Physicians t0 LEFT JOIN table1 t1 ON t1.Id = t0.Speciality INNER JOIN table2 t2 ON t2.Id = t0.Degree INNER JOIN table3 t3 ON t3.Id = t0.WebSite INNER JOIN table4 t4 ON t4.WebSite = t0.WebSite WHERE t3.DirectoryAndRobotStatus = 1 AND t3.OnlineStatus = 1 AND t3.BlockStatus = 0
Savez-vous pourquoi ?
Merci.
Partager