Általánosan, egy táblában kell megjeleníteni az adatokat, ami szűrhető és rendezhető. Már minden gyorsan megy, csak a fizetésre sorrendezve, ha sok sort talál, lassú.
SELECT e.*,
(SELECT MAX(`from_date`) FROM `titles` WHERE titles.emp_no = e.emp_no) AS beosztas,
(SELECT MAX(`from_date`) FROM `salaries` WHERE `salaries`.`emp_no` = e.emp_no) AS fizetes
FROM `employees` AS e
LEFT JOIN `dept_emp` ON (`dept_emp`.`emp_no` = e.emp_no)
LEFT JOIN `departments` AS `departments` ON `dept_emp`.`dept_no` = `departments`.`dept_no`
WHERE
(`dept_emp`.`from_date` = (SELECT MAX(`from_date`) FROM `dept_emp` WHERE `dept_emp`.`emp_no` = e.emp_no)) AND
(`dept_emp`.`to_date` = '9999-01-01')
ORDER BY `fizetes`
LIMIT 0, 20Ez is az.
Update: "/* Sorok megjelenítése 0-19 (összesen 20, A lekérdezés 0.0001 másodpercig tartott.) */"
Persze, mert becache-eli, ha ugyanazokat az adatokat kéred le. Ha megváltoztatod, hogy mire szűrsz, vagy a LIMIT paramétereit, akkor 3-4 sec-ig tart.