Вам определенно следует потратить некоторое время на чтение по индексированию, об этом много написано, и важно понимать, что происходит.
В общем, индекс налагает порядок на строки таблицы,
Для простоты представьте, что таблица - это просто большой CSV-файл.Всякий раз, когда вставляется строка, она вставляется в конце .Таким образом, «естественный» порядок таблицы - это просто порядок, в котором были вставлены строки.
Представьте, что вы загрузили CSV-файл в очень простое приложение для работы с электронными таблицами.Все, что делает эта электронная таблица, это отображает данные и нумерует строки в последовательном порядке.
Теперь представьте, что вам нужно найти все строки, имеющие некоторое значение «M», в третьем столбце.Учитывая, что у вас есть в наличии, у вас есть только один вариант.Вы сканируете таблицу, проверяя значение третьего столбца для каждой строки.Если у вас много строк, этот метод («сканирование таблицы») может занять много времени!
Теперь представьте, что в дополнение к этой таблице у вас есть индекс.Этот конкретный индекс является индексом значений в третьем столбце.Индекс перечисляет все значения из третьего столбца в некотором значимом порядке (скажем, в алфавитном порядке) и для каждого из них предоставляет список номеров строк, в которых появляется это значение.
Теперь у вас есть хорошая стратегиядля нахождения всех строк, где значение третьего столбца равно «М».Например, вы можете выполнить бинарный поиск !В то время как сканирование таблицы требует, чтобы вы просматривали N строк (где N - количество строк), бинарный поиск требует только просмотра записей индекса log-n, в самом худшем случае.Вау, это намного проще!
Конечно, если у вас есть этот индекс, и вы добавляете строки в таблицу (в конце концов, так работает наша концептуальная таблица), вам нужно обновитьИндекс каждый раз.Таким образом, вы выполняете немного больше работы, когда пишете новые строки, но экономите массу времени, когда вы что-то ищете.
Итак, в общем, индексирование создает компромисс между эффективностью чтения и записи.эффективность.Без индексов вставка может быть очень быстрой - ядро базы данных просто добавляет строку в таблицу.Когда вы добавляете индексы, механизм должен обновлять каждый индекс при выполнении вставки.
С другой стороны, чтение становится намного быстрее.
Надеюсь, что это покрывает ваши первые два вопроса (как ответили другие - вам нужно найти правильный баланс).
Ваш третий сценарий немного сложнее.Если вы используете LIKE, механизмы индексирования обычно помогают увеличить скорость чтения до первого «%».Другими словами, если вы ВЫБИРАЕТЕ столбец WHERE LIKE 'foo% bar%', база данных будет использовать индекс, чтобы найти все строки, где столбец начинается с "foo", а затем потребуется просканировать этот промежуточный набор строк, чтобы найти подмножество.который содержит "бар".SELECT ... WHERE LIKE "% bar%" не может использовать индекс.Надеюсь, вы поймете, почему.
Наконец, вам нужно подумать об индексах для нескольких столбцов.Концепция та же самая, и она ведет себя аналогично LIKE - по сути, если у вас есть индекс для (a, b, c), движок будет продолжать использовать индекс слева направо, как может.Таким образом, поиск по столбцу a может использовать индекс (a, b, c), как и поиск по (a, b).Тем не менее, движок должен был бы выполнить полное сканирование таблицы, если вы искали, ГДЕ b = 5 И c = 1)
Надеюсь, это поможет пролить немного света, но я должен повторить, что вам лучше не тратитьнесколько часов копаться в поисках хороших статей, которые подробно объясняют эти вещи.Это также хорошая идея, чтобы прочитать документацию вашего конкретного сервера баз данных.То, как индексы реализуются и используются планировщиками запросов, может довольно сильно различаться.