Какой запрос будет выполняться быстрее в MySql - PullRequest
3 голосов
/ 31 августа 2010

Я создал индексирование для своих таблиц, а затем запускаю одни и те же запросы двумя разными способами: я выполняю эти запросы на MySql, но всегда получаю разное время выполнения, иногда первый выполняется быстрее, а иногда второй. Вот почему мне нужно мнение экспертов по этому вопросу..Queries: First - это

  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'))

и Second, используя 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 ]

3 голосов
/ 31 августа 2010

второй подход будет быстрее первого.

правильное индексирование будет иметь индексы на t1 (поле), t2 (поле), t3 (поле)

когда вы используете объяснение для первого подхода, вы увидите, что mysql создаст две производные таблицы для обоих подзапросов

, тогда как во втором подходе строки, проверенные mysql, будут далекоменьше

2 голосов
/ 31 августа 2010

Используйте join и создайте индекс по тем столбцам, которые участвуют в сравнении. Затем используйте «Объяснить», чтобы проверить производительность :)

2 голосов
/ 31 августа 2010

Добавьте к запросам префикс 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';
2 голосов
/ 31 августа 2010

Только вы действительно можете ответить на ваш вопрос, потому что только у вас есть доступ к точной комбинации оборудования, программного обеспечения, схемы, индексов, данных и т. Д., С которыми ваши запросы будут фактически выполняться.

Посмотрите на оператор MySQL EXPLAIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...