Consider following query:
SELECT *
FROM table1
LEFT JOIN table2 ON
table2.some_primary_key = table1.some_primary_key
LEFT JOIN table3 ON
table3.some_primary_key = table1.some_primary_key OR -- this is the issue
table3.column_with_index = table2.column_with_index
while I check EXPLAIN
it shows me index is not in use for table3
join (however indexes are shown in "possible_keys"). Type: 'ALL'. As per manual:
Join type "ALL": A full table scan is done for each combination of rows from the previous tables.
Query is awful slow.
But when I remove one of the conditions so it will be:
LEFT JOIN table3 ON
table3.some_primary_key = table1.some_primary_key
OR
LEFT JOIN table3 ON
table3.column_with_index = table2.column_with_index
Mysql is using indexes properly. In EXPLAIN
result indexes are shown in 'keys' column, type is 'ref'. Queries are blazing fast.
What to do to make mysql use my indexes while using OR
in join statement?
I tried LEFT JOIN table3 FORCE INDEX(PRIMARY, ind_column)
but no success.