1

約 40k のエントリを持つテーブルを持つ mysql データベースがあります。次のステートメントの実行には約 10 秒かかります (データベースは既に選択されています)。

SELECT * FROM MyTable WHERE Column < 3

なぜこんなに時間がかかるのですか? また、パフォーマンスを改善するにはどうすればよいですか?
他のデータベースは高速ですか? (例: MongoDB、CouchDB、...) ただし、MySQL データベースを使用することをお勧めします。

編集:

次のクエリ...

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;

結果は次のとおりです。

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  Occurances  index   NULL    SearchString    102 NULL    40242   Using where; Using index

次のクエリは、列の値の分布を示しています

SELECT COUNT(*), Column FROM MyTable GROUP BY Column;

結果は次のとおりです。

COUNT(*)    Column
43      0
5       1
106     2
71      3
42      4
283     5
2337    6
9491    7
22073   8
1191    9
1064    10
1105    11
919     12
393     13
288     14
288     15
200     16
123     17
71      18
71      19
36      20
10      21
13      22
8       23
4       24
3       25
4       29
4

3 に答える 3

3

列にインデックスがないと思いColumnます。作成してみてください:

CREATE INDEX idx_MyTable_Column ON MyTable (Column);

EXPLAINインデックスを作成する前後の出力を比較してみてください。

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;

インデックスを使用して、インデックス スキャン (またはそれ以上) が実行されることがわかります。

インデックスは、十分に小さな行セットが基準に一致する場合にのみ役立ちます。ほとんどのテーブルが式と一致するColumn < 3場合、インデックスは役に立たず、プランナーはテーブル スキャンにフォールバックします。これは、インデックスを使用するよりも高速であることが判明するためです。


より詳細な回答が必要な場合は、より多くの情報を提供する必要があります。次の 2 つのクエリの出力が役に立ちます。

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;
SELECT COUNT(*), Column FROM MyTable GROUP BY Column;

上のインデックスのリストと同様にMyTable

于 2012-09-13T21:14:24.637 に答える
1

インデックスにはApache Solrを使用する必要があり、速度が速すぎます。たとえば、Apache Solr instagram Netflix、eBay、Digg、AOLなどを使用してください。

あなたはapache solrについて読んでいます..もっと参考になると思います

Apache ソル http://lucene.apache.org/solr

ウィキ Apache Solr

于 2012-09-13T21:30:46.987 に答える
0

これは、40kレコードの単純な選択では非常に遅いように見えます。テーブルが大きすぎてメモリに保存できない場合(つまり、使用可能なメモリが非常に少ない場合、または大きなファイルをテーブルに直接保存している場合)、MySQLはクエリの実行に非常に長い時間がかかります。

列にインデックスを付けることも大きな違いを生みますが、条件列にインデックスがない場合でも、メモリに収まるテーブルの場合、10秒は非常に遅いように見えます。

大きなテーブルでMySQLが遅くなるのはなぜですか?

于 2012-09-13T21:23:09.767 に答える