ディレクトリトラバーサルといいねクエリについて
友人が現在、画像ファイルを保存するディレクトリがあり、/uploads/avator/140320/*.jpg
という3層になっています。 avator ディレクトリには、このディレクトリにちなんで名付けられた多数のサブディレクトリがあり、おそらく数百ものサブディレクトリがあります。 avator ディレクトリ全体には約 8W のファイルが含まれており、ファイル
の一部は役に立たないジャンク ファイルなので、それらを削除したいと考えています。
このディレクトリ内のほとんどのファイルには、フル パス、つまりパス ファイル名を記録するテーブル内に img_url フィールドがあります (例: /upload/avator/140320/bid001.jpg)。
彼が現在行っていることは、ディレクトリを走査してすべてのファイル名を取得し、テーブル select を検索して、返されたレコードの数が 0 に等しい場合は img_url をチェックすることです。ディレクトリからファイルを削除します。
テーブルには 60,000 件を超えるレコードがあります。
約2Wのファイルが削除できるということです。
しかし、実行の観点から見ると、ディレクトリの移動は非常に高速ですが、like を実行すると遅すぎます。 。もっと良い、より速い方法はありますか?
img_url フィールドにはインデックスが付けられています
-----ソリューションのアイデア----------------------
完全なパスがテーブルに保存されているのに、なぜそれが気に入ったのですか?直接 = 高速です
ディレクトリ glob('/uploads/avator/*/*.jpg') を読み取り、一時テーブルに配置します
この一時テーブルを使用して左側のデータ テーブルを接続します右側の表 null のファイルは削除されるべきファイルです
-----解決策のアイデア------ ----
img の src="" を指定すると、一部のブラウザでは x が表示されます。したがって、img の src を空に設定することはお勧めできません。より良い解決策は、画像要素ノードを削除することです。
------解決策----------------------
% で始まるいいね! ではインデックス作成が有効になりません はい、Buzhu が直接言ったように =
または、角度を変えてデータベースを調べ、有用な写真を新しいフォルダーに切り取ってください。そうすればわかります