Вопрос о запросах типа select max (B) из t, где A = 123 - PullRequest
1 голос
/ 07 апреля 2011

Интересно, как MySQL справится с заявлением?Если оба столбца A, B проиндексированы.

Полагаю, будет два способа сделать это.

  1. a.Выберите все записи из t, которые A == 123 в качестве временного результата b.найти максимальный B из временного результата и вернуться.Временная сложность может быть O (lgN + m).

  2. Получить запись за один шаг, другими словами, T (N) = O (lgN)?

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

1 Ответ

0 голосов
/ 07 апреля 2011

Мой инстинкт сказал бы мне, что, если B не обнуляем и B не малонаселен (действительно редок, всего 1% или ниже, а также содержит менее 10% среднего числа значений на индексный ключ A), такойчто проверка B в порядке убывания , а затем проверка на A = 123 для этих записей стоит того, у MySql не будет полосы индекса на B для этого запроса.

Скорее всего, этопросто использует A (если A достаточно избирателен), извлекает из таблицы записи, сортирует по убыванию B. и возвращает результат.

Это будет означать ваш первый случай, O (N + m).N прямо пропорционально размеру таблицы, который также статистически показывает, сколько записей в среднем будет удовлетворять A = {любой x}

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