8

PHPでは、これはより高速です。同じ情報を取得するためにinclude('somefile.php')、単純なクエリでMySQLデータベースを使用またはクエリしますか?SELECT

たとえば、JavaScriptのオートコンプリート検索フィールドがあり、照合するのに3,000個の用語が必要だったとします。を使用して別のファイルからこれらの用語を読み取る方が速いですか、それとも単純なクエリincludeを使用してMySQLデータベースからそれらを読み取る方が速いですか?SELECT

編集:これは、含めるデータベースとファイルがコードと同じローカルマシン上にあることを前提としています。

4

12 に答える 12

15

場合によります。ファイルがサーバーにローカルに保存され、データベースが別のマシンにインストールされている場合は、ファイルを含める方が高速です。

しかし、それはシステムに依存するため、真実ではない可能性があります。PHP テスト スクリプトを作成してコマンド ラインから 100 回実行し、HTTP 経由で (cURL を使用して) テストを繰り返すことをお勧めします。

例:

use_include.php

<?php

  start = microtime(true);

  include( 'somefile.php' );

  echo microtime(true)-start;

?>

use_myphp.php

<?php

  start = microtime(true);

  __put_here_your_mysql_statements_to_retrieve_the_file__

  echo microtime(true)-start;

?>
于 2008-10-03T10:19:13.097 に答える
4

ファイルを含めると、ほとんどの場合、より速くなります。データベースが別のマシン (共有ホスティングなど) にある場合、またはマルチサーバー セットアップにある場合、ルックアップは追加のホップを作成する必要があります。

ただし、実際には、違いはおそらく問題になりません。リストが動的な場合は、MySQL に保存すると作業が楽になります。静的リスト (国や州など) は PHP インクルードに格納できます。リストが非常に短く (数百のエントリ)、頻繁に使用される場合は、JavaScript に直接ロードして、AJAX を廃止することができます。

MySQL ルートを使用していて速度が心配な場合は、キャッシュを使用してください。

$query = $_GET['query'];
$key = 'query' . $query;
if (!$results = apc_fetch($key))
{ 
    $statement = $db->prepare("SELECT name FROM list WHERE name LIKE :query");
    $statement->bindValue(':query', "$query%");
    $statement->execute();
    $results = $statement->fetchAll();
    apc_store($key, $results);
}

echo json_encode($results);
于 2008-10-03T11:01:24.320 に答える
3

時間の違いは、あえて言えば、基本的な技術よりもシステムの設計にかかっています。MySQL の結果とファイルの両方をメモリにキャッシュできますが、パフォーマンスの違いは無視できるほど小さいものです。

代わりに、メンテナンスの違いは何であるかを自問します。データを変更する可能性はありますか? そうでない場合は、プレーンファイルにポップしてください。コンテンツの一部を頻繁に変更する可能性はありますか? もしそうなら、データベースは操作がずっと簡単です。データの構造についても同じです。「再構築」が必要な場合は、データベースに入れる方が効率的でしょうか?

だから: あなたと、コードとデータの将来のメンテナーにとって最も便利だと思うことをしてください。:-)

于 2008-10-03T10:42:49.443 に答える
2

未知の変数が多すぎるため、正確な答えを出すのは非常に困難/不可能です-ファイルシステムが世界の反対側にあるNFSにマウントされている場合はどうなりますか?または、MySQLデータベース全体がメモリにあります。データベースのサイズも考慮に入れる必要があります。

しかし、もっと答えると、安全な推測は、MySQLの方が高速であり、優れたインデックス、優れたデータベース構造/正規化、そしてあまりにも凝った/複雑なクエリがないことです。I / O操作は常にコストがかかります(読み取り:低速)が、前述のように、データセット全体はすでにMySQLによってメモリにキャッシュされています。

さらに、これらのインクルードされたファイルを使用してさらに文字列操作を行うことを考えたと思います。これにより、事態はさらに厄介になります。MySQLの文字列検索アルゴリズムは、PHPで考えられるものよりもはるかに最適化されていると確信しています。

于 2008-10-03T10:02:32.833 に答える
1

これが定期的に取得するものである場合は、(ディスクからでもデータベースからでも構いません) データをプリフェッチし、スクリプトで memcached などの RAM キャッシュから取得することをお勧めします。

于 2008-10-03T10:29:59.750 に答える
1

私は最近この問題を抱えていました。すべてのページ要求で照会していた mysql のデータがありました。私のデータ セットでは、MySQL を使用するよりも、固定レコード長のファイルを書き込む方が高速でした。

私にとってファイルが MySQL よりも高速になった要因はいくつかあります。

  1. ファイルサイズが小さかった -- テキストデータが 100kb 未満
  2. 私は無作為に選んで検索していませんでした -- インデックスに違いはありませんでした
  3. 接続時間 -- ファイルを開いて読み込むほうが、サーバーの負荷が高いときにデータベースに接続するよりも高速でした。OSがファイルをメモリにキャッシュしたため、これは特に当てはまりました

肝心なのは、私がそれをベンチマークし、結果を比較したということです。私のワークロードでは、ファイル システムの方が高速でした。私のデータセットが大きくなれば、それは変わると思います。私はパフォーマンスに目を光らせ、将来の仕組みを変える準備ができています。

于 2008-10-03T16:00:51.197 に答える
0

両方の方法で実行して、どちらが速いかを確認してみませんか?どちらのソリューションも非常に簡単です。

于 2008-10-03T14:28:53.847 に答える
0

ファイルが大きすぎず、メモリを使いすぎない限り、必ず含めてください。その場合は、データベースをお勧めします。

于 2008-10-03T09:58:43.213 に答える
0

通常、ファイルからスクリプトへの生データの読み込みは、データベースからの読み込みよりも高速です。

ただし、JavaScriptに返す一致を見つけるために、そのデータをクエリしたいようです。その場合、MySQLは、データベースが得意とするものであるため、データの実際のクエリ/検索(特に正しくインデックス付けされている場合など)の方が高速であることがわかります。

スクリプトの実行中に大量のサーバーメモリを使用するため、大きなファイルの読み取りもスケーラビリティが低くなります。

于 2008-10-03T10:03:00.040 に答える
0

後日用語の数が増えると予想される場合は、全文検索フィールドでMySQLを使用することをお勧めします。

于 2008-10-03T14:36:33.317 に答える
0

APC や Xcache などの PHP バイトコード キャッシュを使用すると、ファイルのインクルードが高速になる可能性があります。PHP を使用していてパフォーマンスが必要な場合は、バイトコード キャッシュが絶対に必要です。

データベースへのアクセスを避けるために、含めるPHPスクリプトに静的データを保持することを検討しているようです。あなたは基本的に初歩的なキャッシュを行っています。データが変更された場合にそのファイルを更新する方法がある限り、これは問題なく機能します。静的データに対する SQL クエリを高速化するために、MySQL クエリ キャッシュについても学びたいと思われるかもしれません。または、静的データをメモリに保持するための Memcached。

于 2008-10-03T16:21:18.393 に答える
-3

正確にはわかりませんが、MySQLを使用する私の意見では、たとえ遅くなる可能性があるとしても、コンテンツが動的である場合は使用する必要があります。しかし、インクルードを使用すると、大きなコンテンツの場合はより高速になると確信しています。

于 2008-10-03T09:56:31.363 に答える