考虑以下查询:
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)但没有成功.
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |