0

なぜ innodb テーブルの削除に約 30 秒かかるのかわかりません

テーブルには 400 万行あります

ID のインデックス

キッドのインデックス

(テーブルがパーティション化されているため、これはインデックスのみであり、プライマリではなく、一意ではありません) テーブルはパーティション化されています

 delete from my_table where id = 'xxx' and kid = 'ds54f5sad6w5' limit 1

遅いログでは、クエリ時間は 39 秒、ロック時間は 36 秒、行の検査は 96879 です。

問題はディスクにあります(SSDを使用)

select sql_no_cache * from my_table WHERE id= '1663903' AND kid= '84d4af871929d2159d7d7399a79bb384' LIMIT 1 の説明

書き込みを説明します

id select_type table    type        possible_keys key    key_len ref  rows Extra
1  SIMPLE      my_table index_merge id,kid        id,kid 3,98    NULL 1    Using intersect(id,kid); Using where
4

1 に答える 1

0

EXPLAIN は、クエリが「index_merge」アクセスを使用していることを示していますtype

そのため、2 つのインデックス (これらはkeysフィールドに表示されます) を検索し、関連するエントリを見つけて、2 つの結果の共通点を見つける必要があります。

これは、インデックスを使用しない検索よりも優れている可能性がありますが、通常は (id, kid) の 2 つの列を持つ単一のインデックスを作成する方が適切です。

于 2013-08-15T11:45:07.437 に答える