MySQLでは「サブクエリ」を使用して、ここでいくつかのotherquestionsに設立されたように同一のクエリが高速で実行「を選択し、」一方で、それが遅くなる原因を削除:インデックスを使用することができ、JOINMySQL DELETEがサブクエリでインデックスを使用できないのはなぜですか?
MariaDB [as_01_import]> explain select * from invoice_payment where invoice_id in (select id from dochead where system_id = 5786);
+------+-------------+-----------------+------+---------------------------------------+----------------------------+---------+-------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-----------------+------+---------------------------------------+----------------------------+---------+-------------------------+------+-------------+
| 1 | PRIMARY | dochead | ref | PRIMARY,dochead_system_id | dochead_system_id | 4 | const | 891 | Using index |
| 1 | PRIMARY | invoice_payment | ref | invoice_payment_invoice_fk,invoice_id | invoice_payment_invoice_fk | 4 | as_01_import.dochead.id | 1 | |
+------+-------------+-----------------+------+---------------------------------------+----------------------------+---------+-------------------------+------+-------------+
MariaDB [as_01_import]> explain delete from invoice_payment where invoice_id in (select id from dochead where system_id = 5786);
+------+--------------------+-----------------+-----------------+---------------------------+---------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+--------------------+-----------------+-----------------+---------------------------+---------+---------+------+---------+-------------+
| 1 | PRIMARY | invoice_payment | ALL | NULL | NULL | NULL | NULL | 1235451 | Using where |
| 2 | DEPENDENT SUBQUERY | dochead | unique_subquery | PRIMARY,dochead_system_id | PRIMARY | 4 | func | 1 | Using where |
+------+--------------------+-----------------+-----------------+---------------------------+---------+---------+------+---------+-------------+
2 rows in set (0.44 sec)
知って、私はしたいと思いますエキスパートに質問してください:
MySQL/MariaDBがSUBQUERYのDELETEでインデックスを使用できないのはなぜですか?それは実装上の問題か、それとも概念上の問題ですか?これを解決する計画はありますか?同じ問題が他のSQLベンダーに影響していますか?
質問を読んだことがありますか? – romaninsh
リックは、サブクエリの動作を説明するのとは違って、別のやり方をしているような、それの他の側面に集中していたと思います。それは私から遠く離れていると言いました。[Docs Multi-Table Delete](http://stackoverflow.com/documentation/mysql/1487/delete/8768/multi-table-deletes#t=201607292124449831703)。 – Drew