mysql - 存储引擎 MEMORY 不支持 FULLTEXT 索引
问题描述
我正在将我正在处理的小型 Web 应用程序从使用 LIKE 更改为 MATCH 进行字符串查询,但是我遇到了我需要开始工作的特定查询的问题(不是完整的查询,而是为简洁起见,我删除了所有额外的内容):
SET @n=0;
SET @pubdate='';
SELECT a.idArticle, CONCAT(a.date, '_', LPAD(a.n, 3, '0')) as alt_id, a.source, a.title, a.datetime
FROM (SELECT idArticle,title,datetime,source, @n:=CASE WHEN @pubdate = date(datetime) THEN @n + 1 ELSE 1 END AS n, @pubdate:=date(datetime) as date FROM article ORDER BY date, idArticle) a
WHERE (MATCH(title) AGAINST ('query') )
ORDER BY a.idArticle DESC
这个查询允许我为一篇文章生成一个 ID,格式为“YYYY-MM-DD_n”,其中日期是文章的发表日期,n 是该日期输入数据库的第 N 篇文章(所以第 22 篇文章发表2020 年 5 月 20 日将是 2020-05-20_022)。
运行查询时,我收到错误:
#1214 - The storage engine MEMORY doesn't support FULLTEXT indexes
这里提出的类似问题告诉人们将 InnoDB 更改为 MyISAM,因为 InnoDB 过去不支持全文搜索。我正在通过 XAMPP 运行 MariaDB 10.3.16,它必须足够新到不适用的地方,因为这样的查询有效,并且根据SHOW TABLE STATUS FROM database
,我所有的表都在 InnoDB 上运行:
SELECT * from article WHERE MATCH(title) AGAINST ("query")
所以,这似乎是花哨的递增子查询,但我不知道为什么这会导致问题。出了什么问题,我能做些什么来解决它?
解决方案
由于MEMORY
表在重新启动时丢失,因此此类表上的所有索引都将丢失。 FULLTEXT
重建并非易事。简单地创建 InnoDB 表而不是 MEMORY 表有什么问题?
注意@变量;它们可能不会按照您的预期行事,尤其是在使用子查询时。
推荐阅读
- excel - Excel:计算两个匹配单元格的实例
- java - 根据其他bean有条件地选择bean
- php - 是否可以继承父范围成员属性并将其分配给“use”语句中的内部变量?
- c# - 如何在 404 页面上保持 URL 相同但显示自定义视图
- php - 如何在 Laravel/Passport 中覆盖 `issueToken` 方法
- python - Keras 模型误解了输入数据的形状
- python - 在多索引熊猫中,外部索引升序,内部索引降序
- c++ - 我可以调整被移动的向量的大小吗?
- c - 通过 memcpy 将数据从用户应用程序复制到内核驱动程序
- java - 使用 Spring Boot 连接到 MySQL 数据库时出现问题