MySQL选择查询优化和限制如何在MySQL中工作

巴德瓦杰

我正在使用mysql数据库,该数据库只有一个表“数据”,具有17,151257行。该表具有列string我想打印其中字符串列包含特定查询字符串(存储在“ entered_query”变量中)的所有行,因此我使用了以下命令:

SELECT DISTINCT * from data WHERE string LIKE '%".$entered_query."%' limit 10

显而易见,以上查询需要太多时间来执行。

我已经读过可以使用索引编制,但是在这种情况下怎么办?
我还考虑过将整个数据划分为10个不同的行,然后使用
perl DBI执行10个并行查询

现在我有以下问题:

  1. 如何减少执行时间?
  2. 我听说mysql查询中的“ LIKE”避免了索引编制,因此上述查询还有更好的选择吗?
  3. 当我们在mysql查询中使用限制10时,一旦找到前10个结果,mysql就会立即停止执行,或者先搜索整个数据以获取给定查询,然后返回前10个结果
巴尔玛

常规索引无法用于改进该查询。MySQL索引是B树,这意味着它们可以很快找到索引列的前缀。但是由于您的LIKE查询%是从头开始的,因此没有要搜索的唯一前缀。因此,必须扫描每一行以匹配该模式。

但是,MySQL还支持全文搜索。这将创建该列中所有单词的索引,并且可以快速找到这些单词。有关详细信息,请参见文档

如果使用LIMIT 10,它将在找到满足条件的前10行后立即停止扫描。除非您也使用ORDER BY-否则它必须找到所有行,以便可以在选择前10行之前对它们进行排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章