为什么两个以下查询的执行时间之间存在巨大差异?

时间:2017-07-19 08:22:09

标签: mysql inner-join where-clause sql-like

第一次查询(返回行需要大约14秒)

select * from table_1 
INNER JOIN table_2 ON table_1.column= table_2.column0
where table_2.column2 LIKE "%string%";'

解释结果:

enter image description here

table_1有300k记录,table_2有330k记录。

第二个查询(几乎2.5秒内返回行)

select * from table_1 
where table_1.column1 LIKE "%string%";  

解释结果:

enter image description here

如何让我的第一次查询更快?

1 个答案:

答案 0 :(得分:0)

1)当连接两个表时,很明显它应该处理更多的行。因此,查询2比查询1慢。

2)我假设您知道索引会更快。

加入在table_1.column = table_2.column0上。

如果table_1.column和table_2.column0中的任何一个或任何一个都是非索引列,则查询应转到表并搜索而不是使用索引来进行连接。索引查询会更快。考虑是否可以在这两列上添加索引。

3)在这两个查询中,您正在使用' LIKE"%string%"'。如果您需要使用%string%,请再次考虑。如果有'%'将不会使用索引。在字符串的开头。因此,这不是索引扫描。

并且不要为所有列添加索引。这将使插入,更新和删除操作变慢。建议不要编制太多索引。根据您使用列的频率选择要编制索引的列。

使用EXPLAIN命令检查查询的执行方式。