3

次のシナリオがあります。

約 400 万行の特定の MyISAM テーブルを持つデータベースがあります。私はストアド プロシージャ (MySQL バージョン 5.1) を使用し、特に 1 つを使用して、さまざまな基準でこれらの行を検索します。このテーブルにはいくつかのインデックスがあり、このストアド プロシージャを介したクエリは通常非常に高速です (1 秒未満)。基本的に、私は準備されたステートメントを使用し、この検索 sp でいくつかの動的 SQL を作成して実行します。準備済みステートメントを実行した後、「DEALLOCATE PREPARED stmt;」を実行します。

ほとんどのクエリは 1 秒未満で実行されます (私は LIMIT を使用して、常に 15 行のみを取得します)。ただし、まれに実行に時間がかかるクエリがいくつかあります (たとえば 2 ~ 3 秒)。検索テーブルをできる限り最適化しました。

私は Web アプリケーションを開発しました。私の開発マシンでは、高速なクエリを 1 秒以内に実行して結果を確認できます。

ただし、2 つのブラウザー インスタンスを開いて (開発マシンに対して) 同時検索を実行すると、1 つは実行時間の長いクエリで、もう 1 つはより高速なクエリで、結果が同時に返されます。高速なクエリは、低速なクエリが終了するのを待ってから結果を返します。つまり、両方のクエリに 2 ~ 3 秒かかります...

これには理由がありますか?MyISAM は互いに関係なく SELECTS を処理すると思っていたので、現在これは私が経験している動作ではありません...

前もって感謝します!ティム

4

2 に答える 2

0

これは、同じマシンから実行しているためです。検索が2つの異なるマシンから行われている場合、それらは同時に実行されます。たくさんのブラウザウィンドウを開いて更新を押すだけで、1人の人がMySQLサーバーを停止できるようにしたいですか?

于 2009-03-25T16:25:28.727 に答える
0

そうです。MyISAM テーブルの各選択クエリは、終了するまでテーブル全体をロックします。彼らの言い訳は、これが「非常に高い読み取りスループット」を達成するということです。innoDB に切り替えると、同時読み取りが可能になります。

于 2011-12-07T17:06:20.837 に答える