非常に大きな MySQL データベース (約 100 万項目) があり、そのデータベースに対してかなり複雑なクエリを実行しています。SQL コマンドを phpMyAdmin に入力すると約 2 秒かかりますが、PHP コードを使用して同じ出力を生成するには約 1 ~ 2 分かかります。
なぜこのような時差が生じるのでしょうか。クエリの実行が不十分だった場合、結果が phpMyAdmin に表示されるまでに時間がかかりませんか?
非常に大きな MySQL データベース (約 100 万項目) があり、そのデータベースに対してかなり複雑なクエリを実行しています。SQL コマンドを phpMyAdmin に入力すると約 2 秒かかりますが、PHP コードを使用して同じ出力を生成するには約 1 ~ 2 分かかります。
なぜこのような時差が生じるのでしょうか。クエリの実行が不十分だった場合、結果が phpMyAdmin に表示されるまでに時間がかかりませんか?
まったく同じ出力が得られますか?
データベースに大量のデータがある場合、クエリは何行を返しますか?
phpMyAdmin でクエリを起動すると、ページネーションが自動的に追加されます。
したがって、この最初のクエリでは:
select *
from test
phpMyAdmin は実際にこれを実行します:
select *
from test
limit 0, 30
クエリにその制限がない場合 (PHP スクリプトから実行する場合)、違いを説明できます: 30 行のフェッチと数百/数千/それ以上の行のフェッチは同じ時間かかりません (同じことそれらをレンダリングします)。
クエリで制限を使用している場合、および/または多くの行を取得しようとしない場合は、コードを投稿できますか?
(別の考えられる理由は、クエリ キャッシュです。最初にクエリを実行するときは、かなりの時間がかかります。次回は、MySQL が結果をキャッシュに保持しています)
PHP スクリプトは、単純にクエリを実行するだけでなく、何かを実行する可能性が非常に高くなります (膨大な量のデータを前後にシャッフルするなど)。SQL を実行する PHP コードを教えていただけますか?
に出力バッファリングがなく、データを 1 つずつクライアントに出力すると、1 つの大きなチャンクではなく、非常に多くの小さなチャンクがクライアントに送信されるため、速度が大幅に低下することに注意してください。PHPの出力バッファリングを見てください。
最も単純な形式では:
ob_start();
// Output lots of data here.
ob_end_flush();
phpMyAdmin は、大量のデータを処理できるように最適化されています。内部コードを見て、クエリからデータを取得する方法を確認してください。役立つ場合があります。
また、スクリプトと同じサーバーに phpMyAdmin があると思いますか?