MySQL Query Cost - PullRequest
       9

MySQL Query Cost

1 голос
/ 10 февраля 2011

Может кто-нибудь сказать мне теоретическую разницу в стоимости следующих запросов?

  • SELECT * FROM posts WHERE category IN(1)
  • SELECT * FROM posts WHERE category IN(1,2)
  • SELECT * FROM posts WHERE category IN(1,2,3)

... и т. Д.

Спасибо.

1 Ответ

1 голос
/ 10 февраля 2011

Теоретически, если у вас был индекс по категории И таблица была достаточно большой И индекс выборочный, тогда

Cost for 1st as baseline = N
Cost of 2nd = 2 x N
Cost of 3rd = 3 x N

Если индекс отсутствует или индекс недостаточно избирателен (например, категория = 1 покрывает 10% таблицы), тогда он выполнит сканирование таблицы. Если таблица маленькая, она даже не потрудится использовать индекс. В каком случае

Cost of 1st as baseline = N + X
Cost of 2nd = N + 2X
Cost of 3rd = N + 3X

Причина в том, что полное сканирование таблицы стоит N. Во время сканирования он будет использовать X-разовую выборку всей строки (select *), поэтому в обработке большего количества категорий требуется немного больше, но это не так. значительно влияет на базовое время, необходимое для сканирования таблицы.

...