JJJ*_*JJJ 5 mysql mariadb full-text-search mysql-5.6
当在超过 1 亿行的表上的另一列上使用 order by 时,我试图获得简单的全文匹配,以便更快地进行。基础是一张包含两列全文的表,我想搜索数据库,但按主要(最少/最近)或流行度对其进行排序。是否可以通过另一个索引列上的 order by 快速创建全文?下面的 SQL Fiddle 包含架构并解释了所有查询:
到目前为止,非常快的是在单独的表和连接中对搜索列进行非规范化,但如果没有必要,我宁愿不使用另一个表。下面的 SQL Fiddle(最后是非规范化查询):
第一个问题是你无法控制的。它是什么 ???
查询优化器对FULLTEXT
索引的反应。为什么 ?
(现在想象一下星球大战电影的开头有滚动文字......)
很久以前,我发现
FULLTEXT
索引会使MySQL查询优化器对其他索引的使用无效
Jun 10, 2011
:Mysql全文布尔忽略短语Oct 25, 2011
:在带有“字数”条件的布尔模式中忽略全文索引Mar 18, 2012
:为什么在 MySQL 的 FULLTEXT 索引上 LIKE 比 MATCH...AGAINST 快 4 倍以上?重构查询,以便MATCH ...AGAINST
仅收集键
SELECT a.id FROM a
WHERE
MATCH (`search1`,`search2`) AGAINST ('aaaa' IN BOOLEAN MODE)
ORDER BY a.id DESC
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
应该变成类似的东西
SELECT N.id FROM
(SELECT id FROM a WHERE
MATCH (`search1`,`search2`) AGAINST ('aaaa' IN BOOLEAN MODE)) M
INNER JOIN a N USING (id)
ORDER BY N.id DESC LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
SELECT a.id,a.popularity FROM a
WHERE
MATCH (`search1`,`search2`) AGAINST ('aaaa' IN BOOLEAN MODE)
ORDER BY a.popularity DESC
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
应该变成类似的东西
SELECT N.id,N.popularity FROM
(SELECT id FROM a WHERE
MATCH (`search1`,`search2`) AGAINST ('aaaa' IN BOOLEAN MODE)) M
INNER JOIN a N USING (id)
ORDER BY N.popularity DESC LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
主要思想:使用收集键MATCH ...AGAINST
并将其连接回源表
归档时间: |
|
查看次数: |
7716 次 |
最近记录: |