2009-06-15 2 views
0

私のサイトの最適化クルセイドに、可能な限り多くのmysqlクエリを減らそうとしています。どちらが資源の面でコストがかかりますか?

Imは、サイトのさまざまなモジュールの.txtファイルを書き込み、オンデマンドで更新する部分的なキャッシュを実装しています。私は1つ、それはすべてのユーザーのために静的ではないことができますので、HDで書かれた.txtファイルは、PHPを介してオンザフライで変更する必要がありますに出くわしました。

flush(); 
ob_start(); 
include('file.txt'); 
$contents = ob_get_clean(); 

を介して行われる

は、それから私は、変数$の内容でHTMLを変更して、異なるユーザのためにそれをエコーし​​ます。

また、そのまま残すこともできます。mysqlクエリを実行すると、カテゴリ名(約13個)を持つ小さなテーブルをクエリします。

どれが安価ですか?毎回クエリを実行しています。または上に掲載したメソッドを使用して、HTMLコードをオンザフライで静的な.txtファイルに挿入します。

+0

私の言うことは、この方法は単にデータベースを照会するよりも優れているとは言えません。各ページでどのくらいの作業が行われているかは完全にはわかりませんが。 しかし、とにかく、あなたのタイトルを編集して、その質問が実際に何であるかについての情報を与えてください。 –

答えて

2

ファイルの読み込み(非常に奇妙な設定で保存)は、DBへのクエリ(ネットワークの操作なし、&c)よりもはるかに高速ですが、違いはほとんど測定できません。

+0

私はここでストローを掴んでいるだけですが、私の知っていることは他の何ものでもありません。このページを書くための質問の数を最小限に抑えようとしています。 –

+0

クエリの数だけに集中しないでください。いくつかのクエリが1つより効率的であるか、またはクエリが他のものよりも効率的であることは完全に可能です。 – ceejayoz

+0

私の主なポイント@Yegorは、パフォーマンスが関係しているとき、推測しないでください。* measure *:このエリアでは、誰の直観も間違っています。あなたが得る答えに自信を持たせるために、現実のニーズに可能な限り近い状況で測定してください。 –

0

両方を試してみて、どちらかが優勝者であるか、利用できない場合は、より管理しやすい方を選んでください。これは、DBの位置、ロードの量、複数のアプリケーションインスタンスを実行する必要があるかどうかによって異なります(ネットワーク上でこのファイルを共有する必要があり、ローカルではありません)。

1

最初にクエリを最適化してください。次に、頻繁にアクセスされるデータに対してmemcacheまたは同様のキャッシングシステムを使用し、ファイルキャッシングを追加します。我々は3つすべてを組み合わせて使用​​し、それは非常に滑らかに実行されます。小さな最適化されたクエリはそれほど悪くありません。あなたのDBがローカルサーバーにある場合、ネットワークは問題ではありません。そして、偽造者がMySQLクエリキャッシュを使用することはありません(私はあなたがMySQLを使用すると思います)。

1

あなたのパフォーマンスのボトルネックはどこですか?

ボトルネックがわからない場合は、最適化について賢明な評価を行うことはできません。

メトリックを収集し、それに応じて最適化します。

0

ここに私がPHP/MySQLサイトコードをリファクタリングするときに役立つパターンがあります。

ページあたりのクエリの数は絶対に重要です。インデックスが適切である限り、結合を含む複雑なクエリは最速です。私の経験では、ほとんどの場合、1つのページが5つ以下のクエリで生成され、クラスとクラスの配列がうまく使用されます。多くの場合、セッションのクエリとアプリのクエリが1つです。

索引の後で最も重要なことは、キャッシュ構成パラメーターです。

ループ内でクエリを実行しないでください。

データベースのクエリをファイルに移動することは、特にクエリの整合性が悪化することが多いため、これまで有用な方法ではありませんでした。

アレックスと他の人がテストについて正しいです。あなたのページが著しく遅い場合、理由(または理由)のために遅いです - あなたは何が理由であるかを知り、変更の結果を測定するまで何か変更を開始しません。推測によるリファクタリングは、(あなたの場合のように)複雑さを増すときは、常に戦略を失うことになります。

関連する問題