Вызывает ли следующий запрос SQL сканирование всей таблицы? - PullRequest
1 голос
/ 26 июля 2011

Использует ли следующий запрос полное сканирование таблицы?

Если да, есть ли способ избежать полного сканирования таблицы?

  SELECT a.title, 
         COUNT(*) AS `count`
    FROM b
    JOIN a ON a.id = b.a_id
GROUP BY b.a_id

Обратите внимание, что существуют следующие индексы:

a PRIMARY id


b PRIMARY c_id THEN a_id

b INDEX a_id


Вот результаты объяснения:

id  select_type  table  type    possible_keys  key      ref         rows  extra
--------------------------------------------------------------------------------------
1   SIMPLE       b      index   a_id           a_id     NULL        7     Using index
1   SIMPLE       a      eq_ref  PRIMARY        PRIMARY  dev.b.a_id  1

1 Ответ

3 голосов
/ 26 июля 2011

Вывод объяснения довольно ясен, что он использует индексы на каждом этапе.Полное сканирование таблицы будет указано "ALL" в столбце type.Похоже, он будет использовать индексы для доступа именно к тем записям, из которых вам нужны данные.(Подсчет также выполняется с использованием только индекса.) См. здесь для получения дополнительной информации о интерпретации вывода EXPLAIN.

...