Имеется множество запросов к базе следующего вида:
SELECT `id` FROM `table` WHERE `ip` = '000.000.000.000' ORDER BY `updated_at` DESC
Вопрос: Правильно будет проиндексировать столбцы ip и updated_at вместе или только столбец ip? Индексы какого типа необходимо использовать?
В таблице > 6 миллионов строк, не затормозит ли работу индексация, если я прямо сейчас сделаю запрос на создание индекса?
Индексация наоборот улучшает оптимизацию. В данном случае Вам нужно сделать составной индекс ip и updated_at CREATE INDEX ip_updated ON users(ip, updated_at);
Ваш же случай описан здесь
Сортировка
Составные индексы также можно использовать, если выполняется сортировка:
SELECT * FROM users WHERE gender = 'male' ORDER BY age В этом случае нам нужно будет создать индекс в другом порядке, т.к. сортировка (ORDER) происходит после фильтрации (WHERE):
CREATE INDEX gender_age ON users(gender, age); Такой порядок колонок в индексе позволит выполнить фильтрацию по первой части индекса, а затем отсортировать результат по второй.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей