友人が現在問題に遭遇しています。画像ファイルを保存するディレクトリがあり、ディレクトリ構造は /uploads/avator/140320/*.jpg です。つまり、avator にはプロジェクトにちなんだ名前のサブディレクトリが多数あります。ディレクトリ、おそらく数百。 avator ディレクトリ全体には約 8W のファイルが含まれており、ファイル
の一部は役に立たないジャンク ファイルなので、それらを削除したいと考えています。
このディレクトリ内のほとんどのファイルには、フル パス、つまりパス + ファイル名を記録するテーブル内に img_url フィールドがあります (例: /upload/avator/140320/bid001.jpg)。
彼が今行っていることは、ディレクトリを走査してすべてのファイル名を取得し、テーブル select を検索して img_url をチェックし、返されたレコードの数が 0 に等しい場合は、ファイルを削除します。ディレクトリ。
テーブルには 60,000 件を超えるレコードがあります。
約2Wのファイルを削除できるということです。
しかし、実行の観点から見ると、ディレクトリの移動は非常に高速ですが、遅すぎるように思えます。 。もっと良い、より速い方法はありますか?
img_url フィールドにはインデックスが付けられています
ディレクトリ glob('/uploads/avator/*/*.jpg') を読み取り、一時テーブルに置きます
この一時テーブルを使用して、右側のテーブルがデータ テーブルである場合は、データ テーブルを左に接続します。 null の場合は削除する必要があります。ファイル
Buzhu が直接言ったように、% で始まる「いいね!」はインデックス作成を有効にしません =
または、角度を変えて、データベースを横断し、有用な写真を新しいフォルダーに切り取ってください。そうすれば、わかります