[rt-users] weird Slow SelectOwner query
Laas Toom
laas.toom at eenet.ee
Wed Mar 29 03:43:18 EST 2006
Tuesday 28 March 2006 7:01 pm Ruslan Zakirov wrote:
> Could you show full explain for the query?
Unfortunately (or fortunately ;-) the query now is planned differently than,
when I began testing yesterday so I can not give you the very first explain
output, where the 'main' table was joined in first and which took 8 sec to
complete.
But below are two different EXPLAINs which I can get right now.
(Use fixed-font to view these tabels, but I also included URLs for screenshots
of the same tables)
1) The way this query is run now on our server. This query takes 1.5 sec to
complete and after some runs gets even faster (caching probably).
http://www3.eenet.ee/~laas/explain_select_owners_1.png
SQL query:
EXPLAIN SELECT DISTINCT main.* FROM Users main, Principals Principals_1, ACL
ACL_2, CachedGroupMembers CachedGroupMembers_3 WHERE ((ACL_2.PrincipalId =
CachedGroupMembers_3.GroupId)) AND ((ACL_2.PrincipalType = 'Group')) AND
((ACL_2.RightName = 'OwnTicket')) AND ((CachedGroupMembers_3.MemberId =
Principals_1.id)) AND ((Principals_1.Disabled = '0')) AND
((Principals_1.PrincipalType = 'User')) AND ((Principals_1.id != '1')) AND
((main.id = Principals_1.id)) AND ((ACL_2.ObjectType = 'RT::Ticket' AND
ACL_2.ObjectId = 1365) OR (ACL_2.ObjectType = 'RT::Queue' AND ACL_2.ObjectId =
8) OR (ACL_2.ObjectType = 'RT::System')) ORDER BY main.Name ASC;
EXPLAIN:
id select_ table type possible_ key key_ ref rows Extra
type keys len
------------------------------------------------------------------------------
1 SIMPLE ACL_2 range ACL1 ACL1 85 NULL 7 Using where;
Using index;
Using
temporary;
Using filesort
------------------------------------------------------------------------------
1 SIMPLE main range PRIMARY, PRIMARY 4 NULL 9259 Using where
Users3
------------------------------------------------------------------------------
1 SIMPLE Princi eq_ref PRIMARY PRIMARY 4 rt3. 1 Using where;
pals_1 main.id Distinct
------------------------------------------------------------------------------
1 SIMPLE Cached ref DisGrouMem GrouMem 10 rt3.ACL_2. 1 Using where;
Group GrouMem PrincipalId, Using index;
Members_3 MemberId_idx rt3.main.id Distinct
2) The same query, but I have put the 'Users main' table to the last position
in the FROM statement. This query is fast (0.0032 sec) from the beginning (as
can be concluded by the small number of rows involved in this).
http://www3.eenet.ee/~laas/explain_select_owners_2.png
SQL query:
EXPLAIN SELECT DISTINCT main.* FROM Principals Principals_1, ACL ACL_2,
CachedGroupMembers CachedGroupMembers_3, Users main WHERE ((ACL_2.PrincipalId
= CachedGroupMembers_3.GroupId)) AND ((ACL_2.PrincipalType = 'Group')) AND
((ACL_2.RightName = 'OwnTicket')) AND ((CachedGroupMembers_3.MemberId =
Principals_1.id)) AND ((Principals_1.Disabled = '0')) AND
((Principals_1.PrincipalType = 'User')) AND ((Principals_1.id != '1')) AND
((main.id = Principals_1.id)) AND ((ACL_2.ObjectType = 'RT::Ticket' AND
ACL_2.ObjectId = 1365) OR (ACL_2.ObjectType = 'RT::Queue' AND ACL_2.ObjectId
= 8) OR (ACL_2.ObjectType = 'RT::System')) ORDER BY main.Name ASC;
EXPLAIN:
id select_ table type possible_ key key_ ref rows Extra
type keys len
-----------------------------------------------------------------------------
1 SIMPLE ACL_2 range ACL1 ACL1 85 NULL 7 Using where;
Using
-----------------------------------------------------------------------------
1 SIMPLE Cached ref DisGrouMem, GrouMem 5 rt3.ACL_2. 4 Using where;
Group GrouMem, PrincipalId Using index
Members_3 MemberId_idx
-----------------------------------------------------------------------------
1 SIMPLE main eq_ref PRIMARY, PRIMARY 4 rt3.CachedG 1
Users3
-----------------------------------------------------------------------------
1 SIMPLE Princ eq_ref PRIMARY PRIMARY 4 rt3.main.id 1 Using where;
ipals_1 Distinct
Best regards,
Laas Toom
More information about the rt-users
mailing list