我做了这个查询
select L.some_variable, C.id from l_table L
left join c_table C using (some_variable)
where C.id is null
然后查看上面查询的更完整版本
select L.*, C.* from l_table L
left join c_table C using (some_variable)
where C.id is null
order by L.some_variable
第二次花了8倍的时间。我确信L. *,C。*不是“有罪”。 some_variable 是一个字符串字段。但订购这个不能是20分钟的操作。这么多差异的根源是什么?
some_variable 也不是索引,但是这会影响两个操作,或者排序需要某种索引才能在连接中表现良好?
答案 0 :(得分:0)
如果这是您的查询:
select L.*, C.*
from l_table L left join
c_table C
using (some_variable)
where C.id is null
order by L.some_variable;
我倾向于把它写成:
select l.*
from l_table l
where not exists (select 1 from c_table c where () )
order by l.some_variable;
table_c
中的select
列似乎是多余的,因为它们可能是NULL
。
对于此查询,l_table(l.some_variable, <variables in where>)
上的索引可能能够阻止花费这么多时间的排序。