我有一个包含大约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的索引