1) Így gondoltad?
SELECT `employees`.*, `titles_t`.`title`, `salaries_t`.`salary`, `departments`.`dept_name`, `departments`.`dept_no`
FROM `employees`
LEFT JOIN
(
SELECT `titles`.`emp_no`, `titles`.`title`, MAX(`titles`.`from_date`) FROM `titles` GROUP BY `titles`.`emp_no`
) AS `titles_t` ON (`titles_t`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN
(
SELECT `salaries`.`emp_no`, `salaries`.`salary`, MAX(`salaries`.`from_date`) FROM `salaries` GROUP BY `salaries`.`emp_no`
) AS `salaries_t` ON (`salaries_t`.`emp_no` = `employees`.`emp_no`)
WHERE (`titles_t`.`title`='Senior Engineer') AND (`salaries_t`.`salary`<'100000')
ORDER BY `salaries_t`.`salary` DESC
LIMIT 0, 20
Mert így kb. a 2x-esére gyorsult és a sorrendezéssel sem sokkal lassabb, így kb. 1-2-3 sec, amíg bejön. Köszi a tippet.
2) Nincsen. Ez most localban van, de ahol majd tesztelni fogják, ott az a DB felállás lesz, ahogy most van. Amúgy nekem is az első gondolatom az lett volna, hogy csinálok egy redundáns tárolótáblát, a pillanatnyi értékekkel, dehát ez itt nem játszik.
3) De az indexelve van. A `salary`
nincs és a `title`
sem, de utóbbira már nem is tudnék FULLTEXT
-et nyomni, mert az InnoDB csak kreáláskor engedi, a kreálást pedig nem én végzem: importálni kell. :( A `salary`
-ra rakhatnék, de ld. 2)-es pont.
Valószínűleg igazad van, mert így jelentősen gyorsabb lett. Még majd bütykölöm, hátha bírok rajta valamit csinálni, de a lényeg, amit a topiccímben is feltettem, az előszűrés már megvan, úgyhogy, thx again.