1

MyPHP アプリケーションは、HTTPClient を使用して SELECT ステートメントを MySQL に送信します。

約20秒以上かかります。結果を待っている間、sending dataまたはMySQL Administratorが統計を表示するため、MySQLはすぐに結果を取得できないと思いました。copying to tmp table

しかし、phpMyAdmin や jmater などの別のアプリケーションから同じ SELECT ステートメントを送信すると、2 秒以下で 10 倍速くなります!!

なぜMySQLがそれほど違いを発揮するのか知っている人はいますか?

4

2 に答える 2

1

@symcbean が既に述べたように、php の mysql ドライバーはクエリ結果をキャッシュします。mysql_query()これが、while($row=mysql_fetch_array())ループ内で別のことができる理由でもあります。

MySql Administrator または phpMyAdmin が非常に速く結果を表示する理由は、LIMIT 10背後でクエリに a を追加するためです。

クエリの結果をすばやく取得したい場合は、いくつかのヒントを提供できます。必要なものだけを必要なときに選択する必要があります。

  • select *必要な列だけを選択し、どこでもスローしないでください。これは、後で別の列が必要で、それをステートメントに追加するのを忘れたときに噛み付く可能性があるselectため、必要なときにこれを行います (100 列または 100 万行のテーブルなど)。
  • ユーザーの前に 20 x 1000 のテーブルを投げないでください。とにかく、彼女は巨大なテーブルで探しているものを見つけることができません. 並べ替えとフィルタリングを提供します。おまけとして、彼女が通常探しているものを見つけて、ワンクリックでその記録を表示する方法を提供します。
  • 非常に大きなテーブルでは、必要なレコードの主キーのみを選択してください。while()ループで追加の詳細を取得するより。より多くのクエリを作成するため、これは非論理的に見えるかもしれませんが、約 10 個のテーブル、数百の同時ユーザー、ロック、およびクエリ キャッシュを含むクエリを処理する場合は、物事は常に最初は意味をなさない:)

これらは、上司と私自身の経験から学んだいくつかのヒントです。いつものYMMVです。

于 2012-08-28T10:37:20.210 に答える
0

なぜMySQLがそれほど違いを発揮するのか知っている人はいますか?

MySQLはクエリ結果をキャッシュし、オペレーティング システムはディスク I/O をキャッシュするため ( Linux でのプロセスの説明については、このリンクを参照してください)。

于 2012-08-28T09:28:25.533 に答える