Если у вас есть таблица с 1 миллионом пользователей, и одновременно работает только 1 или 2 - обязательно индексируйте по is_running, и это даст вам фантастическую производительность. В этом конкретном случае лучше всего иметь 2 индекса по отдельности для столбцов - имя пользователя, isrunning. Причина для двух индексов заключается в том, что вы запрашиваете is_running=0
, в этом случае вместо него используется индекс username
.
В противном случае, есть вероятность того, что составной индекс (% имя пользователя, isrunning) поможет 0%. Придерживайтесь одного индекса на имя пользователя.
Наконец, тебе действительно нужна целая запись? Выбрать *? В некоторых сценариях, близких к tipping point
(когда MySQL считает индекс + поиск становится менее эффективным, чем прямое сканирование), вы можете сделать этот запрос более быстрым, чем оригинал. Иметь индекс (имя пользователя, идентификатор)
SELECT mytable.*
FROM (
SELECT id
FROM mytable
WHERE username = 'foo'
AND is_running = 1
) X
INNER JOIN mytable on mytable.id = X.id