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