我在快速搜索一个相当大的表(500万个条目)时遇到了麻烦。
这是MariaDB上的一个新数据库(10.4.25)。
表my_table
的结构如下:
| 身份证|正文|
| - ------| - ------|
| 1个|一些文本|
| 第二章|更多文本|
我现在有一个关于"text"的全文索引,并搜索:SELECT id FROM my_table WHERE MATCH ('text') AGAINST ("some* tex*" IN BOOLEAN MODE);
这不是超级慢,但可以产生数百万个结果。在我的Java应用程序中检索它们需要很长时间,但我需要匹配的ID。
因此,我想限制的数量已经由我知道只能是相关的id,并尝试这样的东西(id是主索引):SELECT id FROM my_table WHERE id IN (1,2) AND MATCH ('text') AGAINST ("some* tex*" IN BOOLEAN MODE);
我希望它能先限制在两个id,然后应用全文搜索,并给我两个结果超级快。唉,这不是发生了什么,我不明白为什么。
如果我已经知道一些id,我如何限制查询,使其只搜索这些id,并通过这样做使查询更快?
1条答案
按热度按时间wz3gfoph1#
当您将
FULLTEXT
(或SPATIAL
)索引与一些“常规”索引一起使用时,优化程序假定前者运行得更快,因此它首先这样做。此外,对表的子集运行
MATCH
也不是件容易的事(也许是不可能的)。这两种情况都表明
MATCH
将首先发生(当然,您希望做相反的事情)。有解决办法吗?我很怀疑。特别是如果有很多行的单词以“some”或“tex”开头的话。
有一件事要尝试“+":
请反馈这是否有帮助。
嗯......也许你想
MariaDB中有两个特性: