2015-08-11 4 views
0

Я читаю о индексах MySQL и все еще имею несколько вопросов.Создание и использование индексов MySQL

Во-первых, у меня есть приложение ASP.NET с базой данных MySQL InnoDB. У меня есть таблица с именем userstable со следующими колонками: last_name, middle_name, first_name, email.

Если бы я хотел, чтобы создать индекс, основанный от последнего имени, которое я мог бы создать индекс, например:

CREATE INDEX last_name_index ON userstable (last_name); 

Теперь у меня есть этот следующий запрос, чтобы выбрать данные, и мой вопрос, если этот регулярный запрос SQL должен быть изменен для использования индекса? Если да, то как?

SELECT * FROM userstable WHERE last_name="johnson" 

Также я прочитал, что если вы хотите добавить строки в таблицу, что индексы должны обновляться, потому что индексы могут устареть.

Означает ли это, что я должен произвольно выдавать эту команду CREATE INDEX last_name_index ON userstable (last_name); каждые столько записей в таблице?

ответ

1

SQL-системы автоматически используют индексы. В общем, оптимизатор определяет, подходит ли индекс и какой индекс использовать для запроса (может быть применимо более одного).

Ваш запрос обычно использует индекс. Единственное исключение может быть, если в таблице было всего несколько строк. Тогда сканирование таблицы может быть быстрее, чем поиск индекса.

Что касается поддержания индексов в актуальном состоянии, это также делается автоматически. Тебе не стоит беспокоиться об этом. Если вы делаете много удалений и обновлений, ваш индекс (и таблица) может оказаться менее эффективным, чем если бы он был создан с нуля. Это явление называется фрагментацией индекса (и документировано here). Поэтому, при некоторых обстоятельствах, для поддержания базы данных и поддержания ее в чистоте, вы хотите перестроить индексы. Однако это довольно редко и обычно не обязательно на таблицах, где вы просто вставляете новые значения.

+0

Спасибо за ваш быстрый ответ. В вашем втором абзаце вы сказали, что мой запрос обычно использует индекс, означает ли это, что мой простой запрос SELECT * FROM userstable WHERE last_name = «johnson» уже использует индекс? т. е. мне не нужно явно изменять этот запрос вообще, чтобы база данных использовала индекс? –

+0

@CDuran. , , Никаких изменений вообще. Вы можете посмотреть план объяснения, чтобы убедиться, что это так. (Просто поместите объяснение перед запросом, и вы получите шаги выполнения.) –

+0

Хорошо, спасибо. –

Смежные вопросы