我做了这个查询
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也不是索引,但这会影响两个操作,或者排序需要某种索引才能在连接中表现良好?
如果这是您的查询:
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>)
上的索引可能能够防止花费这么多时间的排序。