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
不处理数字或不等式。它也不处理“短”词或“停止”词。
超过一千万行,慢得令人痛苦。目前使用'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
不处理数字或不等式。它也不处理“短”词或“停止”词。