Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何改进100万条记录表上的MySQL查询_Mysql_Mysql Workbench - Fatal编程技术网

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

如何改进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)'

我有一个100万条记录的MySQL表,有7列。我有一个主键和一个全文索引列。该表代表一本字典(磁盘大小约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分钟)。

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

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)索引确实是进行等式比较的正确方法。