2011-01-24 13 views
0

私は2つのデータベースを持っています:localhost & remotehost。 Localhostはうまく機能しているように見えます(このボードの助けを借りて、1秒弱です)。 mysqldumpを使用して、テーブル構造、インデックス、&データを含むlocalhostをremotehostにダンプしました。私はremotehostがlocalhostの仮想レプリカであることを期待しましたが、リモートホストでクエリを実行すると、実行に1分以上かかります。説明文は異なっています...「タイプ」を「範囲」に変更することや、使用されるインデックスなど、さまざまな違いがあります。同じデータベースだが異なる説明の結果

(これのいくつかは、おそらくPRIMARYインデックスを使用するように強制的に固定することができますが、私はむしろ、問題の根本を取得し、remotehostのは異なった動作をする理由を理解するだろう)

私の声明:

SELECT names.id, names.first, addr.last FROM names, addr WHERE names.first LIKE 'H%' AND addr.last IS NOT NULL AND names.id = addr.id GROUP BY names.id LIMIT 10 

ローカルホストからのEXPLAIN文:

id| select_type|table|type |possible_keys |key |key_len|ref    |rows|Extra 
1 | SIMPLE  |names|index|PRIMARY,first |PRIMARY|4  |NULL    |448 |Using where 
1 | SIMPLE  |addr |ref |last   |last |4  |files.names.last |25 |Using where 

remotehostのからの声明EXPLAIN:

id| select_type|table|type |possible_keys |key |key_len|ref    |rows|Extra 
1 | SIMPLE  |names|range|PRIMARY,first |first |903 |NULL    |955 |Using where; Using temporary; Using filesort 
1 | SIMPLE  |addr |ref |last   |last |4  |files.names.last |25 |Using where 

UPDATE:

Localhost is using mysql version 5.1.46-log. 
Remotehost is using mysql version 5.0.91-log. 
+0

ServerFaultに移動する議決権は、プログラミングに関する質問ではなく、システム管理に関する質問です。 –

+0

しないでください....これは何よりもmysqlの質問です。このボードにもっと多くのmysqlエキスパートがいるようです。 –

+0

my.cnfファイルを比較して、何かがリモートホスト上で間違って構成されていないことを確認してください。既にチェックしたようですが、remotehostのaddr.idにインデックスがあることを確認してください。また、「テーブル名を最適化する」を実行してみてください。統計を更新するにはremotehostで指定します。あなたはそれをする必要はありませんが、私は他に何を提案するか分かりません。 –

答えて

0

両方のデータベースに出力mysqldump --no-dataを投稿してください。おそらく彼らは異なるロケール、ISAMタイプ、異なるオプションなどを使用していますか?

+0

私は両方のサーバーで両方を走らせました。両方は同じエンジン、インデックスキーなどです。 –

+0

私はアイデアがありません。私が見る唯一の方法は、かなり力強いものです - デバッグ情報を使ってMySQLのビルドをロードし、gdbを接続し、クエリプランの決定をトレースしてください... – GreyCat

0

実行SHOW各テーブルの上にテーブルを作成し、相違点を探します。最初に気になったのは、InnoDBが有効になっているサーバとそうでないサーバのうちの1つで、ストレージエンジンが異なるからです。次に、my.cnfとS​​HOW VARIABLESで相違点を確認してください。

また、2つのデータベースの行数が異なるようです。プランナがクエリを実行する際に使用するインデックスに影響する可能性があります。

+0

私は同じ数の行を持っています...私はそのように見える理由は、2つのサーバーが異なるインデックスを使用しているためだと思う...私はあなたのSHOW CREATE TABLEを行ってくれます –

+0

私はshow create tableを走らせました。それらはまったく同じです... MyISAM dbを使っています...インデックスを含む他のものも100%同じです...変わった –

関連する問題