是否有更好的查询来获得最匹配的结果

Is there a better query to get most matched result

提问人:minami 提问时间:5/4/2022 最后编辑:minami 更新时间:5/4/2022 访问量:61

问:

我正在尝试使用 MATCH AGAINST 获得最匹配的结果。
我的第一个查询可以正常工作,但它使用文件排序。
第二个查询也运行良好,但查询重复且看起来很乱。

如何优化我的查询?
作为参考,索引列是 class_id 和 name。

*仅匹配查询

    SELECT id, name, MATCH (name) AGAINST('john smi') AS score
    FROM member
    WHERE class_id=5
    AND MATCH (name) AGAINST('john smi');

enter image description here我想要的是两个得分最高的值。

*我的第一个查询

    SELECT * FROM (
        SELECT id, name, MATCH (name) AGAINST('john smi') AS score, dense_rank() over (order by  MATCH (name) AGAINST('john smi') desc) ranking
        FROM member
        WHERE class_id=5
        AND MATCH (name) AGAINST('john smi')
    )t where t.ranking = 1;

*第二次查询

    SELECT id, name, MATCH (name) AGAINST('john smi') AS score
    FROM member
    WHERE class_id=5
    AND MATCH (name) AGAINST('john smi') AND MATCH (name) AGAINST('john smi') >= (
        SELECT MATCH (name) AGAINST('john smi')
        FROM member
        WHERE class_id=5
        AND MATCH (name) AGAINST('john smi') limit 1
    )l
MySQL SQL 排名 匹配

评论

0赞 Rick James 5/5/2022
5 行的“文件排序”是微不足道的。此外,“FILEsort”并不总是意味着需要“FILE”;通常“SORT”是在RAM中完成的。

答: 暂无答案