0

クエリが非常に遅い理由を理解しようと数日が経ちました。私は大きなテーブルを持っていますが、巨大な〜70,000レコードではありません。2つのフィールドのみで検索を行っており、インデックスを設定しており、クエリには数分かかります。

これらは単純なクエリであり、拡張するものはありません。Explain Selectで試してみましたが、異常なことは何もありません。違いはありませんし、ウェブサイトやサーバーで直接検索します。

何がうまくいかない可能性があるか考えていますか?

クエリはそのようなものです

SELECT table3_id, email from table1 GROUP BY ID; 

クエリはユーザーの選択によって拡張されます...しかし、これはプライマリ検索です-検索の拡張がさらに悪い場合、これは遅くなります。時間は34-400秒とは異なります。

テーブルは次のようになります。

Table1 (
  id int(11) NOT NULL AUTO_INCREMENT,
  other_id varchar(128) NOT NULL,
  user_id int(11) NOT NULL,
  flag_deleted tinyint(1) NOT NULL DEFAULT '0',
  email varchar(255) NOT NULL,
  datetime datetime NOT NULL,
  table3_id int(11) NOT NULL,
  text_header varchar(1024) NOT NULL,
  text_body text NOT NULL
  PRIMARY KEY (`id`)
) ENGINE=InnoDB ;

インデックス:email、table3_id(検索したもの)

4

2 に答える 2

2

あなたが実際にすべての〜70,000のID /メールを必要としていると仮定すると、あなたがここに持っているものよりもそれを行うためのより良い方法はありません。照会できる情報のより小さなサブセットはありますか?それらを一度にすべて使用していない場合は、次のことを試すことができます。

SELECT table3_id, email, FROM table1
LIMIT x

ここで、xは必要なエントリの数です。

于 2013-03-23T20:20:51.550 に答える
0

解決策を見つけました...テーブルに含まれている未使用のデータが多すぎます。これらのデータを別のテーブルに移動した後、すべてが高速になりました(これが理由ではないことはわかっていますが、機能しました)

この動作を改善する他の考えられる理由は、mysqlを5.1から5.5にアップグレードしたことです。

テーブルでより多くの正規化を行い、結果をより速く取得できます。(できるだけ早く私はそれをする許可を得ています)。

于 2013-04-02T10:53:21.047 に答える