有什么方法可以知道mysql中的select语句读取了多少行?

时间:2012-07-09 14:51:18

标签: mysql

我有一个包含大约1500万行的大表,所有varchar数据。我在它上面运行了一个自连接查询,它有一个3自表连接,如下所示:

SELECT sj1.uid FROM tbl sj1 
JOIN tbl sj2 ON sj1.uid = sj2.uid 
JOIN tbl sj3 ON sj1.uid = sj3.uid
WHERE sj1.product_code = 'tb'
AND sj2.product_code = 'im'
AND sj3.product_code = 'mg'

现在已超过2小时,当我检查show full processlist时,我获得了发送数据的状态,而没有其他任何内容。我想知道是否有任何方法可以知道此查询或任何其他相关状态已处理了多少行。我甚至无法杀死这个查询,怀疑它可能接近它的结束,如果中断它将是一个很大的资源浪费。对此有何帮助?

这是EXPLAIN解释我的内容:

+----+-------------+-------+------+-------------------+-------------------+---------+----------------------------------------+----------+-------------+
| id | select_type | table | type | possible_keys     | key               | key_len | ref                                    | rows     | Extra       |
+----+-------------+-------+------+-------------------+-------------------+---------+----------------------------------------+----------+-------------+
|  1 | SIMPLE      | a     | ALL  | ix_unique_user_id | NULL              | NULL    | NULL                                   | 14251264 | Using where |
|  1 | SIMPLE      | b     | ref  | ix_unique_user_id | ix_unique_user_id | 103     | ph_usertrack_analysis.a.unique_user_id |        2 | Using where |
|  1 | SIMPLE      | c     | ref  | ix_unique_user_id | ix_unique_user_id | 103     | ph_usertrack_analysis.a.unique_user_id |        2 | Using where |
+----+-------------+-------+------+-------------------+-------------------+---------+----------------------------------------+----------+-------------+

因此正在使用unique_user_id的索引

2 个答案:

答案 0 :(得分:1)

不,您无法从MySQL中获取有关查询进度的任何信息。

答案 1 :(得分:-1)

Index您列出了必填列,另请参阅Count

SELECT count(sj1.uid) FROM tbl sj1 
JOIN tbl sj2 ON sj1.uid = sj2.uid 
JOIN tbl sj3 ON sj1.uid = sj3.uid
WHERE sj1.product_code = 'tb'
AND sj2.product_code = 'im'
AND sj3.product_code = 'mg';

如果需要,请放置group by