我在这里阅读了大量关于 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(1.7 GHz i5,4GB RAM)上运行 MySQL。如果这是我的性能问题的唯一答案,我会将数据库移动到适当的位置;-)
编辑:解释表
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE myTable ALL NULL NULL NULL NULL 11596725 使用 where