English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как создавать индексы на таблицах для улучшения производительности базы данных.
индекс - это структура данных, связанная с таблицей, которая предоставляет быстрый доступ к строкам таблицы на основе значений одного или нескольких столбцов (ключ индекса).
Предположим, что в вашей базе данных естьcustomersтаблица и вы хотите использовать следующую команду, чтобы найти всех клиентов, имена которых начинаются на букву A.
SELECT cust_id, cust_name, address FROM customers WHERE cust_name LIKE 'A%';
Чтобы найти таких клиентов, серверу необходимоcustomersТаблица сканируется построчно, и проверяется содержимое столбца с именами.尽管对于只有几行的表来说, это может работать нормально, но представьте себе, если таблица содержит один миллион строк, то выполнение запроса может занять много времени. В этом случае вы можете ускорить обработку, добавив индекс на таблицу.
Вы можете создать индекс с помощью следующего оператора CREATE INDEX:
CREATE INDEX index_name ON table_name (column_name);
Например, чтобы создать индекс в таблице клиентовnameДля создания индекса на столбце можно использовать:
CREATE INDEX cust_name_idx ON customers (cust_name);
По умолчанию, индекс позволяет повторяющиеся записи и сортирует их в порядке возрастания. Чтобы потребовать уникальных записей индекса, добавьте ключевое слово UNIQUE после CREATE, как показано ниже:
CREATE UNIQUE INDEX cust_name_idx ON customers (cust_name);
В MySQL вы можете проверить доступные индексы на определенной таблице, как показано ниже:
mysql> SHOW INDEXES FROM customers \G
Совет:Используйте \G вместо точек с запятой (;) для завершения SQL-запроса. Если результаты слишком широки для текущего окна, результаты будут отображаться вертикально, а не в стандартном таблицевом формате.
Вы также можете создать индекс, охватывающий несколько столбцов. Например, предположим, что у вас уже есть таблица в базе данныхпользователейимеющие столбцыfirst_nameиlast_nameЕсли вы часто обращаетесь к этим столбцам, вы можете создать индекс на двух столбцах одновременно для повышения производительности, как показано на рисунке ниже:
CREATE INDEX user_name_idx ON users (first_name, last_name);
Совет:Вы можете представить себе индекс базы данных как часть индекса книги, чтобы помочь вам быстро найти или определить конкретную тему в книге.
Индекс следует создавать с осторожностью. Поскольку каждый раз, когда добавляется, обновляется или удаляется строка в таблице, необходимо также модифицировать все индексы на этой таблице. Таким образом, чем больше индексов у вас есть, тем больше работы нужно серверу, что в конечном итоге приводит к снижению производительности.
Ниже приведены некоторые основные принципы, которые можно следовать при создании индексов:
Создайте индекс для столбцов, которые вы часто используете для поиска данных.
Не создавайте индекс для столбца, который никогда не используется в качестве ключа поиска.
Создайте индексные столбцы для улучшения производительности связи.
Избегайте включения в столбцы слишком большого количества значений NULL.
Точно так же, в таблицах с небольшим количеством данных индекс не требуется, так как сканирование таблицы сервером обычно быстрее, чем сначала проверять индекс.
Внимание:При создании таблицы большинство систем базы данных (например, MySQL, SQL Server и т.д.) автоматически создают индексы для таблицPRIMARY KEYиUNIQUEСтолбца создания индекса.
Вы можете использовать следующие строки для удаления индексов, которые больше не нужны.
DROP INDEX index_name ON table_name;
Следующие строки будут удалять изcustomersУдаление индекса таблицыcust_name_idx.
DROP INDEX cust_name_idx ON customers;
Кроме того, еслиУдаление таблицы:Тогда также будут удалены все связанные индексы.
Предупреждение:Внимание: перед удалением индекса проверьте, какие влияния это может вызвать. В качестве общего правила, не создавайте или удаляйте индексы бездумно.