从我的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。 有什么方法可以加快这个过程吗? 有一种方法可以检查在运行时处理的记录数量吗?
答案 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;