Mysql оба запроса используют «Using where & Using временный», но есть разница в скорости - PullRequest
0 голосов
/ 18 января 2019

У меня есть два запроса для получения информации, как показано ниже.

  1. SELECT distinct(I), O from (SELECT I, O FROM HB WHERE ID > 0) as H;
    
  2. SELECT distinct(I), O FROM HB WHERE ID > 0;
    


  1. объясните, как показано ниже:

    1   PRIMARY <derived2>  ALL                 5   Using temporary
    2   DERIVED HB  range   PRIMARY PRIMARY 4       5   Using where
    
  2. как это:

    1   SIMPLE  HB  range   PRIMARY PRIMARY 4       5   Using where; Using temporary
    

Это имеет некоторую разницу, но я думаю, используя где и временные. Так что это будет иметь тот же результат.

Но 1. очень медленнее, чем 2. В чем разница?

Заранее спасибо.

1 Ответ

0 голосов
/ 18 января 2019

Запрос 1 имеет два временных (хотя это не так): один для подзапроса, один для DISTINCT. Следовательно, запрос 1 работает медленнее.

Еще один момент, на который следует обратить внимание: Using filesort, Using temporary обычно отображается в первой строке EXPLAIN, даже если это действительно относится к какой-то другой строке.

Для более подробной информации в EXPLAIN, используйте EXPLAIN FORMAT=JSON SELECT ...

...