我正在使用mysql数据库,该数据库只有一个表“数据”,具有17,151257行。该表具有列string。我想打印其中字符串列包含特定查询字符串(存储在“ entered_query”变量中)的所有行,因此我使用了以下命令:
SELECT DISTINCT * from data WHERE string LIKE '%".$entered_query."%' limit 10
显而易见,以上查询需要太多时间来执行。
我已经读过可以使用索引编制,但是在这种情况下怎么办?
我还考虑过将整个数据划分为10个不同的行,然后使用 perl DBI执行10个并行查询。
现在我有以下问题:
常规索引无法用于改进该查询。MySQL索引是B树,这意味着它们可以很快找到索引列的前缀。但是由于您的LIKE
查询%
是从头开始的,因此没有要搜索的唯一前缀。因此,必须扫描每一行以匹配该模式。
但是,MySQL还支持全文搜索。这将创建该列中所有单词的索引,并且可以快速找到这些单词。有关详细信息,请参见文档。
如果使用LIMIT 10
,它将在找到满足条件的前10行后立即停止扫描。除非您也使用ORDER BY
-否则它必须找到所有行,以便可以在选择前10行之前对它们进行排序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句