如何改善100万记录表上的MySQL查询

时间:2014-12-01 22:43:29

标签: mysql mysql-workbench

我有一个包含7列的100万条记录MySQL表。我有一个主键和一个全文索引列。该表代表字典(磁盘大小~300 MB)。

列是:

    'id', 'int(11)', 'NO', 'PRI', NULL, 'auto_increment'
    'writtenForm', 'varchar(255)' - Fulltext index
    'languageIdentifier', 'varchar(255)'
    'partOfSpeech', 'varchar(255)'
    '_index', 'int(11)'
    'writtenText', 'longtext'
    'lexiconid', 'varchar(255)'

当我运行此查询时:

select * from tablename where writtenForm = 'herstellen'

我在4,5秒内得到了结果。对我来说太过分了,因为这个表很简单,查询没有连接,我在PC上本地运行它。

我注意到全文索引没有排序规则。这可能是个问题吗?如果是,请告诉我如何将排序规则添加到索引中。

我还注意到,我对表格本身进行的任何更改(添加列,删除列)都需要超过5分钟(最后一列删除大约需要15分钟)。

2 个答案:

答案 0 :(得分:5)

由于您使用的是=而不是全文搜索,您可以:

a)删除全文索引并将其替换为常规索引

b)在全文索引

旁边添加常规索引

我怀疑你的查询正在进行全表扫描而不使用全文索引,因为你实际上没有进行MATCH全文搜索

答案 1 :(得分:0)

MySQL Workbench还包含一个Visual Explain图来帮助解决这些问题。有关其他信息,请参阅标题为Using Visual Explain to improve query performance.

的相关教程