使用LEFT JOIN中的索引和OR条件

Pet*_*ter 5 mysql join

考虑以下查询:

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
Run Code Online (Sandbox Code Playgroud)

虽然我检查EXPLAIN它显示我索引没有用于table3连接(但索引显示在"possible_keys").输入:'ALL'.根据手册:

连接类型"ALL":对前面表格中的每个行组合进行全表扫描.

查询非常慢.

但是,当我删除其中一个条件时,它将是:

LEFT JOIN table3 ON
   table3.some_primary_key = table1.some_primary_key
Run Code Online (Sandbox Code Playgroud)

要么

LEFT JOIN table3 ON
   table3.column_with_index = table2.column_with_index
Run Code Online (Sandbox Code Playgroud)

Mysql正在使用索引.在EXPLAIN结果索引在'键的列中所示,类型是"REF".查询速度非常快.

如何OR在join语句中使用mysql时使用我的索引?

我试过LEFT JOIN table3 FORCE INDEX(PRIMARY, ind_column)但没有成功.

lin*_*ico 2

我可以建议你使用CASE 语句

是一个类似的问题,您可以提出并扩展到您的需求:

希望这可以帮助