Suppose you have such a request ...
SELECT T.TaskID, T.TaskName, TAU.AssignedUsers
FROM `tasks` T
LEFT OUTER JOIN (
SELECT TaskID, GROUP_CONCAT(U.FirstName, ' ',
U.LastName SEPARATOR ', ') AS AssignedUsers
FROM `tasks_assigned_users` TAU
INNER JOIN `users` U ON (TAU.UserID=U.UserID)
GROUP BY TaskID
) TAU ON (T.TaskID=TAU.TaskID)
Several people can be assigned for this task. The purpose of this query is to show one row for each task, but with the people assigned to the task in one column
Now ... suppose you have the correct index setting on tasks, usersand tasks_assigned_users. The MySQL optimizer will still not use the TaskID index when joining a view tasks. WTF?!?!?
So my question is ... how can you make this query using the index on tasks_assigned_users.TaskID? Temporary tables are lame, so if this is the only solution ... MySQL Optimizer is stupid.
Indexes Used:
- tasks
- Users
- tasks_assigned_users
- PRIMARY - (TaskID, UserID)
- UNIQUE - (UserID, TaskID)
EDIT: , , / , . ?
EDIT 2: MySQL ( , )
3: : http://venublog.com/2010/03/06/how-to-improve-subqueries-derived-tables-performance/ , Case # 2 , , , MySQL .: (
4: this: " MySQL 5.6.3 FROM (.. ):... , ". ...