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

Mysql 为什么下面两个查询的执行时间存在巨大差异?,mysql,inner-join,where-clause,sql-like,Mysql,Inner Join,Where Clause,Sql Like,第一次查询(返回行大约需要14秒) 解释结果: 表1有300k条记录,表2有330k条记录 第二个查询(大约在2.5秒内返回行) 解释结果: 如何使我的第一次查询更快?1)当连接两个表时,显然它应该处理更多的行。因此,查询2比查询1慢 2) 我假设你知道索引会更快 连接在表1上。列=表2.0 如果表_1.column和表_2.column0中的两个或任何一个都是非索引列,则查询应转到该表并进行搜索,而不是使用索引进行联接。索引查询将更快。考虑是否可以在这两个列上添加索引。< /P> 3) 在

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

解释结果:

表1有300k条记录,表2有330k条记录

第二个查询(大约在2.5秒内返回行)

解释结果:

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

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

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

连接在表1上。列=表2.0

如果表_1.column和表_2.column0中的两个或任何一个都是非索引列,则查询应转到该表并进行搜索,而不是使用索引进行联接。索引查询将更快。考虑是否可以在这两个列上添加索引。< /P> 3) 在这两个查询中,您都使用了“LIKE”%string%”。如果需要使用%String %,请再次考虑。如果字符串开头有“%”,则不会使用索引。因此,这将不是索引扫描

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


使用EXPLAIN命令检查查询是如何执行的。

首先是两个表的内部联接。第二张桌子里只有一张桌子。很明显,它会比第一个更快。我知道join会导致处理更多的行数,但在这里,我们扫描每个查询中几乎相等的行数,因为我可以看到两个查询的解释结果(已使用EXPLAIN命令的结果更新了问题)。如果您在第一次查询中注意到对其他表(而不是基表)中的列执行了类似于查询的操作,这可能是原因吗?您能为这两个查询发布解释结果吗?我知道join会导致处理更多的行,但在这里,我们在每个查询中扫描的行数几乎相等,因为我可以看到两个查询的解释结果(已使用EXPLAIN命令的结果更新了问题)。此外,“column”和“column0”也被编入索引,其中as“column1”和“column2”未编入索引,而LIKE子句仅在这些未编入索引的列中使用。如果您注意到在第一次查询中,像is操作是对其他表(而不是基表)的列执行的,这可能是原因吗?@farhan我们都在同一家公司工作:)在您的第一次查询中,估计行数是319355。在第二个查询中,行数不是319355。对于ActivationOrgDetails中的每一行,从CmpGroupMappings表中读取一行。CampaignOrgDetails中的估计行读取数为319355。因此,对于319355中的每一行,从CmpGroupMappings中读取一行。如果列是文本列,数据也将存储在磁盘而不是内存中。因此,在text列中搜索文本可能比在普通varchar列中搜索文本需要更多的时间。
select * from table_1 
INNER JOIN table_2 ON table_1.column= table_2.column0
where table_2.column2 LIKE "%string%";'
select * from table_1 
where table_1.column1 LIKE "%string%";