对临时表进行全文搜索的MYSQL例程。性能问题

对临时表进行全文搜索的MYSQL例程。性能问题,mysql,performance,full-text-search,full-text-indexing,routines,Mysql,Performance,Full Text Search,Full Text Indexing,Routines,我有一个名为“Item”的表,它是INNODB,具有以下布局: 身份证 说明->全文索引。 日期 全文索引设置为索引1个字符的单词,不幸的是,我无法绕过这个要求。当用户搜索较大的单词(如“item 59929”)时,以下例程运行正常,但在某些情况下会导致搜索,如“item 1 a 22 4 c”,其中空格必须保持不变。执行这1个字符的搜索时,数据库将爬网。在日常生活中处理这个问题的最佳方法是什么?我确实遇到了一个障碍,因为您似乎无法使用innodb引擎在临时表上创建全文索引,它们必须由myisa

我有一个名为“Item”的表,它是INNODB,具有以下布局:

身份证 说明->全文索引。
日期

全文索引设置为索引1个字符的单词,不幸的是,我无法绕过这个要求。当用户搜索较大的单词(如“item 59929”)时,以下例程运行正常,但在某些情况下会导致搜索,如“item 1 a 22 4 c”,其中空格必须保持不变。执行这1个字符的搜索时,数据库将爬网。在日常生活中处理这个问题的最佳方法是什么?我确实遇到了一个障碍,因为您似乎无法使用innodb引擎在临时表上创建全文索引,它们必须由myisam创建。以下是我目前使用的简化版本:

drop temporary table if exists tmpFilter;

CREATE TEMPORARY TABLE tmpFilter(
ID INT,
Description Varchar(320),
Date datetime,
PRIMARY KEY(ID)) ENGINE=MYISAM; --  HAS TO BE MY ISAM as of 5.6 FULL TEXT ON TEMP INNODB IS NOT ALLOWED

ALTER TABLE tmpFilter ADD FULLTEXT INDEX(description);  -- ADD FULL TEXT
ALTER TABLE tmpFilter DISABLE KEYS;

INSERT INTO tmpFilter
SELECT ID, Description, Date
FROM item
WHERE date > DATE_SUB(NOW(), INTERVAL 15 MONTH)
    AND description LIKE CONCAT('%item 1 2 a 4%');
    AND MATCH (description) AGAINST ('"1 2 a 4" @30' in boolean mode);



ALTER TABLE tmpFilter ENABLE KEYS; 

SELECT * 
FROM tmpFILTER
WHERE MATCH (description) AGAINST ('+item +1 +2 +a +4' in boolean mode);

我尝试了一些不同的方法,但它们完全没有什么不同。提前谢谢

MySQl的新版本支持innodb上的全文索引。item表中的记录数是多少?正确,我在innodb表上有全文索引,但问题是不能在例程中对临时innodb表应用全文索引。目前有575000个项。是否可以从表项中创建一个小的sql转储(可能是40-50条记录),您可以插入op sqlfriddle。然后将链接粘贴到这里?全文索引永远不会超过一个更好的设计,它将保持搜索词作为一个多对多的关系,如果你正确地索引它,真正的挑战是在更多的时间挖掘后模拟与布尔模式的匹配速度都是由这一行引起的”和匹配(描述)对(“'1 2 a 4”@30'在布尔模式下);”如果我能加快近距离搜索的速度,这几乎是即时的。你能给我一个解释(截图就好了)查询和你正在运行的查询吗?你在跑步吗?我想知道“使用临时表”是否会显示在额外的列中,那么也许我有一个答案可以加快您的查询速度