【发布时间】:2013-03-08 16:00:56
【问题描述】:
我需要将三个表连接在一起。第一个有 ~100k 行,第二个 ~300k 行,最后一个 ~40 行。第一个和第二个应该由一个复合条件连接,但这是诀窍。查询要求它是OR 条件。由于 OR 条件,索引无法正确使用。我尝试将这两个困难的表分离为两个单独的查询,并用 union 将它们连接起来,以帮助 mysql 找到正确的索引。
我可以做些什么来优化这个查询?
select * from a, b, c where (a.x = b.x OR a.y = b.y) and b.z = c.z
【问题讨论】:
-
我要做的第一件事是将您的连接条件移动到连接 ON 条件而不是 where 子句
-
我不确定,现在不能尝试,但我会检查是否有助于将 2 个不同的变体分开?
-
@AarolamaBluenk 我想看一个证明,写所有列名确实更快。
-
@tombom 使用常识即可。选择单个列而不是所有列,看看结果通过网络传输需要多长时间。
-
是的,但如果你需要所有列,那也没什么区别。