( TCH | 2020. 10. 11., v – 20:53 )

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.