如何改进100万条记录表上的MySQL查询
我有一个100万条记录的MySQL表,有7列。我有一个主键和一个全文索引列。该表代表一本字典(磁盘大小约300 MB) 各栏分别为:如何改进100万条记录表上的MySQL查询,mysql,mysql-workbench,Mysql,Mysql Workbench,我有一个100万条记录的MySQL表,有7列。我有一个主键和一个全文索引列。该表代表一本字典(磁盘大小约300 MB) 各栏分别为: 'id', 'int(11)', 'NO', 'PRI', NULL, 'auto_increment' 'writtenForm', 'varchar(255)' - Fulltext index 'languageIdentifier', 'varchar(255)' 'partOfSpeech', 'varchar(255)'
'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分钟)。由于您使用的是=而不是全文搜索,您能否: a) 删除全文索引并将其替换为常规索引 或 b) 在全文索引旁边添加常规索引
我怀疑您的查询正在进行全表扫描而没有使用全文索引,因为您实际上没有进行匹配全文搜索,因为您使用的是=而不是全文搜索,您能: a) 删除全文索引并将其替换为常规索引 或 b) 在全文索引旁边添加常规索引
我怀疑您的查询正在进行全表扫描,而没有使用全文索引,因为您实际上没有进行匹配全文搜索。MySQL Workbench还包括一个可视化的解释图来帮助解决这些问题。有关更多信息,请参阅标题为MySQL Workbench的相关教程,其中还包括一个可视化的解释图,以帮助解决此类问题。有关更多信息,请参阅相关教程,标题为显示输出
explain select*from tablename where writenform='herstellen'
1 SIMPLE\u de_dict ALL FTidx 979377使用where
\u de_dict
当然是表名显示输出explain select*from tablename where writenform=“herstellen”当然是表名,根据查询计划,它不是一个完整的表扫描,但它仍然读取大量行,然后过滤掉不匹配的行。不过,正如您所建议的,常规(btree)索引确实是进行相等性比较的正确方法。根据查询计划,它不是一个完整的表扫描,但它仍然读取大量行,然后过滤掉不匹配的行。不过,正如您所建议的,常规(btree)索引确实是进行等式比较的正确方法。