查询与存在需要这么长时间

时间:2016-04-02 12:33:04

标签: mysql sql

从我的debian终端,我尝试在mysql客户端执行如下查询:

SELECT * 
FROM stop_times_lazio_set2_withtime2 AS B  
WHERE EXISTS 
(SELECT * 
FROM stop_times_lazio_set2_emptytime2 AS A 
WHERE B.trip_id=A.trip_id);

table A包含大约300万条记录。 table B是A的约40万条记录的子集。

我想选择A的所有记录,这些记录有一行"父母"具有相同的ID(是的,它不是唯一的/主要ID)

现在需要花费数小时......现在我在2小时左右,我仍然只看到一个闪烁的指针......这个查询是否正确?即使我无法访问其他mysql客户端,如phpmyadmin。 有什么方法可以加快这个过程吗? 有一种方法可以检查在运行时处理的记录数量吗?

4 个答案:

答案 0 :(得分:2)

我猜你已经编入了trip_id的索引?编写查询还有另一种方式,也许有帮助:

SELECT *
FROM stop_times_lazio_set2_withtime
WHERE trip_id IN (SELECT trip_id FROM stop_times_lazio_set2_emptytime2)

答案 1 :(得分:0)

我希望直接JOIN快得多......

SELECT B.* 
FROM stop_times_lazio_set2_withtime2 AS B
JOIN stop_times_lazio_set2_emptytime2 AS A ON B.trip_id=A.trip_id

答案 2 :(得分:0)

为什么不使用更简单的请求?

SELECT A.* 
FROM stop_times_lazio_set2_emptytime2 AS A, stop_times_lazio_set_withtime2 AS B
WHERE B.trip_id=A.trip_id;

有了这么多记录,显然需要时间。

实际上,您可以通过在请求结尾处添加此项来一次只处理少数

来阻止它
LIMIT <beginning>, <number of records>

答案 3 :(得分:0)

你有没有试过&#34;离开加入&#34; ??

示例:

select columns from withtime 
  left join emptytime on withtime.tripid=emptytime.tripid;