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

时间:2010-08-31 12:03:35

标签: mysql database performance

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

  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中编写此类查询的更好方法。

4 个答案:

答案 0 :(得分:3)

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

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

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

而在第二种方法中,mysql检查的行将远远少于

答案 1 :(得分:2)

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

查看MySQL EXPLAIN语句。

答案 2 :(得分:2)

使用EXPLAIN对查询进行前缀,以查看它们的分析方式。

最好避免使用WHERE子句中的子查询,因为它们可能需要为每一行执行。当需要子查询时,最好在FROM子句中使用它,创建derived table。 E.g。

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

答案 3 :(得分:2)

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