MySQLで SELECT と DELETE はどの程度時間が違いますか? 「チェックした画像たちを、一つの掲示板に集める」という機能を作っているのですが、それを UPDATE する場合➀か➁か? どちらがいいのか悩んでいます。 例えば thread_id=1 の掲示板が、画像を image_id=1,2,3 と三つ持っているとき、これを image_id=2,3,4 のように UPDATE する場合、次のどちらがいいのか?という悩みです。 ――――――――――――― ➀ 現状のレコードを全て DELETE してから、全て INSERT する → 1,2,3 を DELETE し、2,3,4 を INSERT する ➁ 削除するレコードのみ DELETE し、新たにチェックしたもののみ INSERT する → 1 を DELETE し、4 を INSERT する ――――――――――――― 尚、掲示板と画像は次のような構造だとします。 ――――――――――――― -- 画像データ CREATE TABLE images( id INT AUTO_INCREMENT, image_src VARCHAR(200), PRIMARY KEY(id) ); --掲示板データ CREATE TABLE threads( id INT AUTO_INCREMENT, thread_title VARCHAR(100), PRIMARY KEY(id) ); -- 掲示板が持っている画像データ CREATE TABLE relations( image_id INT, thread_id INT, PRIMARY KEY(image_id, thread_id), INDEX(thread_id, image_id) ); ――――――――――――― で考えたのは次の内容です。 ――――――――――――― もし掲示板が持てる画像数を100件くらいに限定するならば実装が楽な①にすべきだと思いますが、1万件とかになると必要なものだけを DELETE する②にすべきかな? と、最初は思ったのですが、もし②でも現状のレコードを全て SELECT しないといけませんから( SELECT したそれらと、新たにチェックされた画像とを array_diff して、削除すべき image_id を取得しないといけませんから)、 ならば「どうせ➁のために全件 SELECT するなら、➀で全件 DELETE しても速度は変わらないかも?」と考えるようになりました。 ――――――――――――― 改めまして、こういうときは①か➁かどちらがいいのでしょうか? ご回答宜しくお願い致します。
PHP