SQL:速度的全文索引

SQL: FULLTEXT Index for speed

超过一千万行,慢得令人痛苦。目前使用'LIKE'统计点击次数:

SELECT COUNT(*) FROM `table` WHERE `job` LIKE '%sales%' AND `location` LIKE '%New York%'

我的想法是否正确:

(1) 对每个字段应用全文索引

(2)使用CONTAINS语句提高速度:

SELECT COUNT(*) FROM `table` WHERE contains('location', '"New York"') and contains ('job',"sales")

这会产生与我最初的 LIKE 查询相同的结果吗?

这会不会快很多倍,唯一的缺点是数据库的存储量会大幅增加?

示例:我想统计这样的数据:“销售经理”、“纽约布法罗”

问:我想对每个字段应用 FULLTEXT 索引并用类似的东西替换查询以提高速度,我的想法是否正确?

答:是的,你在添加索引以提高性能方面是正确的。


问:我是否认为这会产生与我的 LIKE 查询相同的结果?

答:我不确定,因为我在 MySQL 中找不到任何与 CONTAINS 相关的子句。但请参考 this 作为 full-text 索引的解决方案。


问:我是否认为这会快很多倍,唯一的缺点是数据库的存储大小会大幅增加?

答:嗯,老实说,这不是个好主意。因为文本是不可预测的,所以使用文本作为索引不是一个好主意。


不管我怎么想,你可能已经选择了你的想法。但我希望您能找到另一个专栏来降低风险和索引成本。 谢谢

将此索引添加到您的 table:

FULLTEXT (location, job)

使用此 WHERE 子句:

WHERE MATCH(location, job) AGAINST("sales manager new york")

它将工作得更快。

更多

如果您有很多包含“文本”的列,并且搜索可能包含其中任何一个或所有列的内容,可能添加一个包含所有内容的额外列会更好文字混在一起。然后在该列上有一个 FULLTEXT 索引,在该列上有一个 MATCH 索引。

请注意 FULLTEXT 不处理数字或不等式。它也不处理“短”词或“停止”词。