私はPhalcon 3.0.4を使用しています。私は自分のフォルダ内の各ファイルに対してforeachを作った。現在私は4000ファイルしかありません。私は、ファイル名がすでにMySQLに存在するかどうかを調べるためにfindFirstを実行しました(私のテーブルには100,000行あります)。しかし、私がfindFirstを使うと、レスポンスは非常に遅いです(レスポンスを得るのに20分待たなければなりません)。ここに私のコードは次のとおりです。Phalconスーパー・スロー・イン・ラージ・ループを照会
$dir = new FilesystemIterator("files/path/to/my/files/");
foreach ($dir as $file) {
if ($file->getExtension() == 'json') {
$filename = $file->getFilename();
$explode_filename = explode("_", $filename);
$date = $explode_filename[0];
$unformatted_date = DateTime::createFromFormat("Ymd-His", $date);
$date_server = $unformatted_date->format("Y-m-d H:i:s");
$timestamp_app = $explode_filename[2];
$date_app = date("Y-m-d H:i:s", $timestamp_app/1000);
echo $date_server;
$json_data = json_decode(file_get_contents($file), true);
$scan = Scans::findFirst(array(
"name = :name:",
"bind" => array("name" => $filename)
));
if (!$scan) {
...
}
}
}
私はQueryBuilder PHQLと私のクエリを作ってみましたが、私は同じ結果があります:私はFindFirstのかqueryBuilderを削除した場合、応答は〜30msのですが、と
$scan = $this->modelsManager->createBuilder()
->from("Scans")
->where("name = :name:", ["name" => $filename])
->limit(1)
->getQuery()
->execute();
をfindFirstは20分かかります...私のテーブルで検索のパフォーマンスを上げるにはどうすればいいですか?より良いものを実行するようにコードを変更することにより
を使用することが、その後いくつかの列を設定し、インデックス
ああ、あなたは非常に良い提案を右です! – John