[英]Limit fulltext search in MariaDB (innodb)
我無法快速搜索相當大的(500 萬個條目)表。
這是 MariaDB (10.4.25) 上的 innodb。
表my_table
的結構如下:
ID | 文本 |
---|---|
1個 | 一些文字 |
2個 | 更多文字 |
我現在有一個關於“文本”的全文索引並搜索:
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);
希望它首先限制為 2 個 ID,然后應用全文搜索並快速給我兩個結果。 las,那不是發生的事情,我不明白為什么。
如果我已經知道一些 id 只搜索這些 id 並通過這樣做使查詢更快,我該如何限制查詢?
當您將FULLTEXT
(或SPATIAL
)索引與某些“常規”索引一起使用時,優化器假定前者運行得更快,因此它首先執行此操作。
此外,針對表的子集運行MATCH
並非易事(也許是不可能的)。
兩者合謀說MATCH
將首先發生。 (當然,您希望做相反的事情。)
有解決方法嗎? 我對此表示懷疑。 特別是如果有很多行的單詞以“some”或“tex”開頭。
要嘗試的一件事是“+”:
MATCH ('text') AGAINST ("+some* +tex*" IN BOOLEAN MODE);
請報告這是否有幫助。
嗯...也許你想要
MATCH (`text`) -- this
MATCH ('text') -- NOT this
MariaDB 有兩個特點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.