0

我在这里阅读了大量关于 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

4

1 回答 1

0

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

DROP INDEX idx;
ALTER TABLE myTable ADD INDEX charchol_idx (charchol2, charchol3);
于 2013-09-27T10:15:11.007 回答