1

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

4

2 回答 2

1

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

于 2012-07-09T14:59:06.083 回答
-1

使用所需列为您的表格编制索引,另请参见计数

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';

如果需要,可以按组放置。

于 2012-07-09T14:56:55.820 回答