一尘不染

再次探讨MySQL MyISAM表性能问题

sql

这个问题与有关。

我有一个具有以下结构的 表:

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上有一个索引。所以,应该在第二个查询服用 THAT 长时间?

编辑#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

阅读 118

收藏
2021-03-17

共1个答案

一尘不染

您是否尝试强制使用索引?喜欢:

SELECT sourceid FROM page USE INDEX (sourceid_index)

像sgehrig注释一样,使用EXPLAIN检查是否使用了索引?并分享结果?

EXPLAIN select sourceid from page

它还可以帮助共享索引的定义:

SHOW INDEX FROM page
2021-03-17