0

この質問はこれに関連しています

次の構造のページテーブルがあります。

CREATE TABLE  mydatabase.page (
  pageid int(10) unsigned NOT NULL auto_increment,
  sourceid int(10) unsigned default NULL,
  number int(10) unsigned default NULL,
  data mediumtext,
  processed int(10) unsigned default NULL,
  PRIMARY KEY  (pageid),
  KEY sourceid (sourceid)
) ENGINE=MyISAM AUTO_INCREMENT=9768 DEFAULT CHARSET=latin1;

データ列には、レコードあたり約 80KB ~ 200KB のサイズのテキストが含まれます。データ列に格納されるデータの合計サイズは約 1.5GB です。

このクエリの実行には0.08秒かかります。

select pageid from page

ただし、このクエリの実行には約130.0秒かかります。

select sourceid from page

ご覧のとおり、page.pageid にプライマリ インデックスがあり、page.sourceid にインデックスがあります。では、2 番目のクエリにはそれほど時間がかかるのでしょうか?

編集#1

EXPLAINが返されました

id select_type table type  possible_keys key      key_len ref rows Extra
1  SIMPLE      page  index               sourceid 5           9767 Using index

申し訳ありませんが、プロファイリングが機能しませんでした... MySQL (4.1.22) は SHOW PROFILE クエリを認識しませんでした。

SHOW INDEXが返されました

Table Non_unique Key_name  Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
page  0          PRIMARY   1            pageid      A         9767                             BTREE 
page  1          sourceid  1            sourceid    A         3255                        YES  BTREE 
4

3 に答える 3

1

インデックスの使用を強制しようとしましたか? お気に入り:

SELECT sourceid FROM page USE INDEX (sourceid_index)

sgehrig コメントのように、インデックスが使用されている場合は EXPLAIN を使用して確認しますか? 結果を共有しますか?

EXPLAIN select sourceid from page

インデックスの定義を共有することも役立ちます。

SHOW INDEX FROM page
于 2009-05-11T09:28:59.053 に答える
0

あなたの sourceid フィールドはどのくらい違いますか? 行数と比較して異なる sourceid 値がわずかしかない場合は、インデックスのサイズを増やしてみてください。

于 2009-05-11T08:18:39.417 に答える