此问题与 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;
数据列包含每条记录大小约为 80KB - 200KB 的文本。 data列中存储的数据总大小约为1.5GB。
执行此查询需要 0.08 秒:
select pageid from page
但执行此查询大约需要 130.0 秒:
select sourceid from page
如您所见,我在 page.pageid 上有一个主索引,在 page.sourceid 上有一个索引。那么第二个查询应该花费那么那么长吗?
编辑#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
最佳答案
您是否尝试强制使用索引?喜欢:
SELECT sourceid FROM page USE INDEX (sourceid_index)
像 sgehrig 注释一样,使用 EXPLAIN 检查是否使用了索引?并分享结果?
EXPLAIN select sourceid from page
它还可以帮助分享索引的定义:
SHOW INDEX FROM page
关于sql - MySQL MyISAM 表性能问题重温,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/847154/