Tru*_*oft 7 mysql optimization select
从2个表执行select时我发现了一些奇怪的东西:
SELECT * FROM table_1 WHERE id IN (
SELECT id_element FROM table_2 WHERE column_2=3103);
Run Code Online (Sandbox Code Playgroud)
此查询大约需要242秒.
但是当我执行子查询时
SELECT id_element FROM table_2 WHERE column_2=3103
Run Code Online (Sandbox Code Playgroud)
它花了不到0.002s(并产生了2行).
然后,当我做的时候
SELECT * FROM table_1 WHERE id IN (/* prev.result */)
Run Code Online (Sandbox Code Playgroud)
它是相同的:0.002s.
我想知道MySQL为什么会这样做第一个查询,比最后两个查询分别花费更多的时间?它是根据子查询结果选择内容的最佳解决方案吗?
其他细节:table_1约有.9000行,并table_2有90000行.
在我添加索引column_2后table_2,第一个查询花了0.15秒.
查询分析器可能会评估每行的子查询.
尝试使用INNER JOIN替换子查询,看看是否可以提高性能:
SELECT *
FROM table_1 t1
INNER JOIN table_2 t2
ON t1.id = t2.id_element
AND t2.column_2 = 3103
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1820 次 |
| 最近记录: |