MySQL性能 - 大型数据库

时间:2013-09-27 10:10:22

标签: mysql

我已经在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

1 个答案:

答案 0 :(得分:0)

您不需要为使用相等运算符的此类请求创建FULLTEXT索引。只需在每个char字段上创建一个索引,它将在WHERE条件中使用,并删除全文索引:

DROP INDEX idx;
ALTER TABLE myTable ADD INDEX charchol_idx (charchol2, charchol3);