2011-01-06 9 views
1

表であるなります。このMySQLの表を以下に示す遅い

  1. 列は/ここで
  2. 何ら変更を設定されていない
  3. のみ【選択単純]、無削除/挿入/他者と接合等を検索時間検索の+は、(カラム:例では「キー」)索引付けされ、同じ列で行く
  4. 99%
  5. エンジン:のMyISAM
  6. 行形式:ダイナミック
  7. があります他の2つのインデックス(列:ID /位置)

この表はすべてのページの読み込みで使用されるため、サイズと速度の比率が関係しています。いくつの行を(非常に)高速化し、高速化し、次に低速化し、次にクロールするように減らしますか?

 
[columns name] | [data type]  | [collation] 
id    | int(11)    
name    | varchar(64)  | utf8_general_ci  
key    | varchar(64)  | utf8_general_ci | [ 99% used for search: is indexed]  
value   | text    | utf8_general_ci  
identifier_id | int(11)    
sort_order  | int(5)    
last_adjusted | datetime   
location   | varchar(255)  | utf8_general_ci  
group_no   | int(3) 
+0

からのshow indexesの結果を掲載し、また、explain planを持つ典型的なクエリです。 –

+0

テーブルは「遅い」ではありません。クエリが可能性があります。 –

+0

@a_horse_with_no_nameこれは、テーブルのサイズに応じてテーブル内のデータにアクセスする方法です。ショートカットですが、ポイントがあります。ちょっとばかだと思います。 – Jeffz

答えて

1

これは、サーバーの設定によって大きく異なります。

MySQLサーバーで使用可能なメモリの量が主な関心事であり、次にテーブルが構成されているストレージの種類。

使用しているインデックスのタイプを指定していないか、keyUNIQUEインデックス、または重複するものがありますか?私はUNIQUEと思っていますが、これは非常にかなりの時間の間、高速になります。ユニークなインデックスを検索するための効率は約o(log n)であり、そのようなインデックスの検索自体は比較的簡単であることを念頭に置いておくと、インデックスはメインメモリから外れていなければならず、かなり遅いメディアを差し替えて

+0

私は今はMySQLのメモリ許容量にアクセスできませんが、 VDS 1024/50。また、訂正:検索は2列(2番目:identifier_id)で行われ、ボットインデックスは一意ではありません。質問:まだ20,000行は安全な制限ですか? (ボールパークは、私がpojectが完了したときにテストするので、私が探しているものです) – Jeffz

+0

@Jeffz:一度に2つの列を意味するのではなく、ユニークでもなくても、そのテーブルサイズのレコードが20,000件になると、それらのテキストフィールドにもかなり小さなインデックスが作成され、わずか数MBになります。ほとんどのサーバーで問題ありません。 – Orbling

+0

一度に2つの列を取っていただきありがとうございます - どちらも一意ではありません - 私はこの表が "すばらし"である必要があります - したがって、分離点としてidentifier_idを持つ別々の表にコンテンツを分割することも検討します。そのような場合、キーのみが検索され、各テーブルは5K行を超えることはありません。しかし、そのような分割は面倒です。それがこの質問の理由です。 – Jeffz

関連する問題