1

列の量とタイプが異なる2つのMySQLテーブルがあります。ただし、両方で同じと呼ばれるDATETIME型の列が1つあります:expires

現在、2つのクエリを使用しています。

"DELETE FROM `table1` WHERE `expires` < UTC_TIMESTAMP()"
"DELETE FROM `table2` WHERE `expires` < UTC_TIMESTAMP()"

Q1:接続のない複数のテーブルにクエリを使用したDELETEことがないため、単一のクエリを作成する正しい方法がわかりませんでした。使わなくても全然可能COMMITですか?

Q2: DBにまだ多くのレコードがないため、PHPからの2つのクエリを使用するか、1つのクエリを使用して期限切れのレコードを削除するかのパフォーマンスの違いをテストできません。誰か知っていますか?

4

2 に答える 2

0

1つのクエリで2つのテーブルから削除できます。

DELETE FROM table1 JOIN table2 ON (join_condition) WHERE table1.expires < UTC_TIMESTAMP() AND table2.expires < UTC_TIMESTAMP

これは、データモデルでJOINが正しい場合にのみ意味があります。

私の知る限り、複数テーブルの構文が高速になる理由はありません。実際、参加する必要があるため、少し遅くする必要があります(ディスクから読み取られた後、データはすでにメモリにあるため、処理が少しだけ失われるため、それほど遅くはありません)。

複数テーブルの構文は、標準のSQLに準拠していません。これはmysql固有の拡張機能です。

于 2012-04-25T02:49:24.953 に答える
0

たとえば、時間の問題が心配な場合は、最初のクエリの実行に1分かかりますが、これはシステムの問題になります(2番目のテーブルの値は1分+ 2番目のクエリの実行時間後に期限切れになります)。これらを一緒に使用できます。次のようなトランザクションで:

begin transaction
set @ts = utc_timestamp();
delete from table_1 where expires< @ts;
delete from table_2 where expires< @ts;
commit

両方が同時に更新されます。

于 2012-04-25T02:58:16.513 に答える