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 に答える