【问题标题】:How to make a FULLTEXT search with ORDER BY fast?如何使用 ORDER BY 快速进行 FULLTEXT 搜索?
【发布时间】:2016-12-06 00:29:58
【问题描述】:

我试图让一个简单的 FULLTEXT 匹配更快,以便在超过 1 亿行的表的另一列上使用 order by。是否可以在另一个索引列上快速创建 FULLTEXT? SQL Fiddle 下面的模式和所有查询的解释:

http://sqlfiddle.com/#!9/ed646c/1

到目前为止,我所拥有的是非规范化和连接,但这需要一个单独的表,如果没有必要,我宁愿没有另一个表。下面的 SQL Fiddle(最后的非规范化查询):

http://sqlfiddle.com/#!9/6aabf/8

我对架构更改持开放态度,或者,如果必须的话,可以使用完整的搜索引擎。

【问题讨论】:

  • 谢谢,但我不想按相关性排序
  • 我看到您的测试用例中只有 2 行的结果;真实数据有多少?
  • 如果你说你的第一个查询非常快:你总是使用limit 5吗?检查您的查询没有限制(例如尝试count(*))并且没有订单。如果您按相关性以外的任何其他方式进行排序,这是您的查询所需的最短时间 - 因为它必须查找全文索引中的所有行,而不仅仅是任何随机的 5 个第一个结果。从表中排序和访问完整数据所需的时间取决于找到的行数。

标签: mysql sql database mariadb


【解决方案1】:

您不需要相同数据的两个副本;对于“非规范化”情况,您可以“自我加入”。

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2010-10-25
    • 2012-09-16
    • 1970-01-01
    相关资源
    最近更新 更多