我已经在stackoverflow,博客文章,教程等上阅读了大量帖子,但我仍然无法解决MySQL数据库相当讨厌的性能问题。请记住,对于大型MySQL数据库,我是一个新手。
我有一张大约一张桌子。 11.000.000行(将增加到20.000.000或更多)。这是布局:
CREATE TABLE `myTable` (
`intcol1` int(11) DEFAULT NULL,
`charcol1` char(25) DEFAULT NULL,
`intcol2` int(11) DEFAULT NULL,
`charcol2` char(50) DEFAULT NULL,
`charcol3` char(50) DEFAULT NULL,
`charcol4` char(50) DEFAULT NULL,
`intcol3` int(11) DEFAULT NULL,
`charcol5` char(50) DEFAULT NULL,
`intcol4` int(20) DEFAULT NULL,
`intcol5` int(20) DEFAULT NULL,
`intcol6` int(20) DEFAULT NULL,
`intcol7` int(11) DEFAULT NULL,
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
FULLTEXT KEY `idx` (`charcol2`,`charcol3`)
) ENGINE=MyISAM AUTO_INCREMENT=11665231 DEFAULT CHARSET=latin1;
像
这样的选择语句 SELECT * from myTable where charchol2='bogus' AND charcol3='bogus2';
需要25秒左右才能执行。这太慢了,随着桌子的增长会更慢。
该表根本没有任何插入或更新(可以这么说),主要用于输出char列的搜索。
我试图制作索引工作(正如你所看到的那样玩FULLTEXT),但似乎我错过了一些东西。有没有考虑如何加快性能?
请注意:我目前在我的Macbook Air上运行MySQL(1.7 GHz i5,4GB RAM)。如果这是我的性能问题的唯一答案,我会将数据库移动到适当的位置; - )
编辑:解释表
id select_type表类型possible_keys键key_len ref行额外
1 SIMPLE myTable ALL NULL NULL NULL NULL 11596725使用where
答案 0 :(得分:0)
您不需要为使用相等运算符的此类请求创建FULLTEXT索引。只需在每个char字段上创建一个索引,它将在WHERE条件中使用,并删除全文索引:
DROP INDEX idx;
ALTER TABLE myTable ADD INDEX charchol_idx (charchol2, charchol3);