、私は以下の困惑の状況があります。mysqlはこのサブクエリが依存していると判断するのはなぜですか? MySQLの5.1.34サーバで
mysql> explain select * FROM master.ObjectValue WHERE id IN (SELECT id FROM backup.ObjectValue) AND timestamp < '2008-04-26 11:21:59';
+----+--------------------+-------------+-----------------+-------------------------------------------------------------+------------------------------------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------------+-----------------+-------------------------------------------------------------+------------------------------------+---------+------+--------+-------------+
| 1 | PRIMARY | ObjectValue | range | IX_ObjectValue_Timestamp,IX_ObjectValue_Timestamp_EventName | IX_ObjectValue_Timestamp_EventName | 9 | NULL | 541944 | Using where |
| 2 | DEPENDENT SUBQUERY | ObjectValue | unique_subquery | PRIMARY | PRIMARY | 4 | func | 1 | Using index |
+----+--------------------+-------------+-----------------+-------------------------------------------------------------+------------------------------------+---------+------+--------+-------------+
2 rows in set (0.00 sec)
mysql> select * FROM master.ObjectValue WHERE id IN (SELECT id FROM backup.ObjectValue) AND timestamp < '2008-04-26 11:21:59';
Empty set (2 min 48.79 sec)
mysql> select count(*) FROM master.ObjectValue;
+----------+
| count(*) |
+----------+
| 35928440 |
+----------+
1 row in set (2 min 18.96 sec)
- どのようにそれが唯一の は、すべてのレコードを訪問する2分かかり500000件のレコードを調べるために3分かかることがありますか?
- 別のデータベース のサブクエリはどのようにして分類できますか?
- この質問に対しては、何ができるのですか?
UPDATE:
長い時間がかかった実際のクエリは、DELETEだったが、あなたはそれらに説明することができません。 DELETEは私が副選択を使用した理由です。
DELETE FROM master.ObjectValue
WHERE timestamp < '2008-06-26 11:21:59'
AND id IN (SELECT id FROM backup.ObjectValue) ;
:
分から0.01までの時間を短縮DELETE FROM m
USING master.ObjectValue m INNER JOIN backup.ObjectValue b ON m.id = b.id
WHERE m.timestamp < '2008-04-26 11:21:59';
私は今からの問合せをリライト「...使用したTからDELETE」マニュアルを読み、構文について見出しました空のバックアップの秒数.ObjectValue。
ありがとうございました。
カウント(*)ははるかに速くなければなりません。 ObjectValueはテーブルかビューですか? – Johan