【发布时间】:2010-10-25 05:34:53
【问题描述】:
这个问题与this one有关。
我有一个具有以下结构的页面表:
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;
data 列包含的文本大小约为每条记录 80KB - 200KB。 data 列中存储的数据总大小约为 1.5GB。
执行此查询需要 0.08 秒:
select pageid from page
但执行此查询大约需要 130.0 秒:
select sourceid from page
如您所见,我在 page.pageid 上有一个主索引,在 page.sourceid 上有一个索引。那么第二个查询应该花费 THAT 长吗?
编辑#1
解释返回
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 查询。
显示索引返回
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
【问题讨论】:
-
请执行“EXPLAIN select sourceid from page”并为此查询启用 pforiling:“SET profiling = 1;”,执行查询“SHOW PROFILE;”然后禁用分析“SET profiling = 2;”和过去的结果。
-
糟糕——首先它应该是“profiling”而不是“pforiling”,然后应该是“SET profiling = 0;”禁用分析。
-
刚刚按要求编辑了帖子
标签: sql mysql performance query-optimization myisam