繁体   English   中英

哪个查询将在MySql中执行得更快

[英]Which query will execute faster in MySql

我在我的表上创建了索引,然后使用两种不同的方式触发相同的查询:我在MySql上运行这些查询,但总是得到不同的执行时间,有时候第一个更快,有时是第二个......这就是为什么我需要专家对此的意见。查询是第一个是

  select t1.field 
  from table1 as t1 
  where t1.field in (
      select t2.field 
      from table2 as t2 
      where t2.field in (
        select t3.field from table3 as t3 
          where t3.field='something'))

第二次使用join作为

 select t1.field 
 from table1 as t1, 
      table2 as t2,
      table3 as t3 
 where t1.field = t2.field 
  and t2.field = t3.field 
  and t3.field='something'

所以任何人都可以告诉我哪些会给我带来高性能以及为什么我的数据库太大了....所以我想知道哪种是在MySql中编写此类查询的更好方法。

第二种方法比第一种方法更快。

正确的索引将在t1(字段),t2(字段),t3(字段)上具有索引

当您使用explain作为第一种方法时,您将看到mysql将为两个子查询创建两个派生表

而在第二种方法中,mysql检查的行将要少得多

只有您才能真正回答您的问题,因为只有您可以访问您的查询实际运行的硬件,软件,架构,索引,数据等的确切组合。

看一下MySQL EXPLAIN语句。

使用EXPLAIN作为查询的前缀,以查看它们的分析方式。

最好避免使用WHERE子句中的子查询,因为它们可能需要为每一行执行。 当需要子查询时,最好在FROM子句中使用它,从而创建派生表 例如

SELECT *
FROM
  some_table
  INNER JOIN (
    SELECT * FROM another_table
  ) derived_table ON some_table.id = derived_table.id
WHERE
  some_table.x = 'y';

在参与比较的列上使用join和create index。 然后使用“解释”来检查性能:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM