【发布时间】: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