OR conditions are normally difficult to optimize when used on different columns, a pain when the columns are of range conditions and worst when done between 2 or more different tables. Look at my example below, the original query is trying to find rows which conditions are based on columns from the JOIN’ed tables.
mysql [localhost] {msandbox} (employees) > EXPLAIN SELECT -> e.emp_no, birth_date, first_name, -> last_name, gender, hire_date, -> salary, from_date, to_date -> FROM employees e -> INNER JOIN salaries s ON (e.emp_no = s.emp_no) -> WHERE e.hire_date BETWEEN '1990-06-01 00:00:00' AND '1990-07-01 00:00:00' OR -> s.from_date BETWEEN '1990-06-01 00:00:00' AND '1990-07-01 00:00:00' -> ORDER BY e.emp_no, hire_date, from_date \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: e type: ALL …[Read more]