0

めちゃくちゃになったデータベースの修正に取り組んでいます。この DB には MyISAM と InnoDB のテーブルがいくつかあります。次の 3 つのテーブルを使用するクエリを作成する必要があります。

table_a => InnoDB
table_b => InnoDB
table_c => MyISAM

クエリの実行には約 1 分かかります。クエリでテーブル レベルのロックが発生した場合に本番サイトで問題が発生する可能性があることを心配しています。ドキュメントに基づいているかどうかはわかりません。MyISAM がテーブルをロックし、InnoDB が行をロックすることは知っていますが、それらを一緒に使用しています。クエリは次のとおりです。

INSERT INTO 
    table_a (`x`, `y`, `z`)
SELECT 
    table_b.x, table_b.y, table_c.z 
FROM 
    table_b, table_c 
WHERE 
    table_b.id = table_c.id AND
    table_b.value IS NOT NULL AND
    table_b.id NOT IN (SELECT table_a.id FROM table_a WHERE 1);

このクエリが実行されると、ここで何が起こるかわかりません。InnoDBであるtable_aに書き込みが発生するため、テーブルロックは発生しないと思います。ただし、書き込み操作は MyISAM と InnoDB の両方で発生する読み取りに基づいているため、これがどのように管理されるかはわかりません。ロックがどのように管理されているかについてはまだよくわかっていないため、このクエリの実行中にこれらのテーブルのいずれかがロックされるかどうかを調べる必要があります。助けてくれてありがとう。

4

1 に答える 1