MySQL - Не丛集索引

Здравствуйте, будущие волшебники баз данных! Сегодня мы отправимся в увлекательное путешествие в мир не丛ных индексов MySQL. Не волнуйтесь, если вы новички в этом - я буду вашим дружелюбным проводником, и мы шаг за шагом рассмотрим эту тему. Так что возьмите杯咖啡 (или чай, если это ваше дело), и погружаемся!

MySQL - Non-Clustered Index

Что такое не丛ный индекс?

Прежде чем мы перейдем к деталям, начнем с основ. Представьте, что вы находитесь в библиотеке (помните такие?). Книги расставлены на полках в алфавитном порядке по фамилии автора. Это похоже на то, как данные хранятся в таблице базы данных. А что, если вы хотите найти все книги определенного жанра? Придется пролистать каждую книгу - это займет много времени!

Вот где на помощь приходит не丛ный индекс. Это как создание отдельного списка, который организует книги по жанру, с каждой записью, указывающей на местоположение книги на полке. В терминах базы данных, не丛ный индекс - это отдельная структура, содержащая копию выбранных столбцов из таблицы, вместе с указателем на полную строку в основной таблице.

Основные особенности не丛ных индексов:

  1. Они отделены от основных данных таблицы.
  2. Их можно создать на одном или нескольких столбцах.
  3. На одной таблице может существовать несколько не丛ных индексов.
  4. Они улучшают производительность запросов для определенных условий поиска.

Не丛ные индексы в MySQL

В MySQL, когда вы создаете индекс без указания его как Уникальный или Основной ключ, вы создаете не丛ный индекс. Давайте посмотрим, как это сделать:

CREATE INDEX idx_lastname ON customers (last_name);

Эта команда создает не丛ный индекс с именем idx_lastname на столбце last_name таблицы customers. Теперь, когда вы ищете клиентов по их фамилии, MySQL может использовать этот индекс, чтобы найти результаты намного быстрее.

Когда использовать не丛ные индексы

Не丛ные индексы很适合 для:

  1. Столбцов, часто используемых в предложениях WHERE
  2. Столбцов, используемых в условиях JOIN
  3. Столбцов, используемых в предложениях ORDER BY или GROUP BY

Однако помните золотое правило индексации: "С великой силой приходит великая ответственность." Слишком много индексов могут замедлить операции INSERT, UPDATE и DELETE, так как каждый индекс нужно обновлять вместе с таблицей.

Создание не丛ного индекса с помощью NodeJS

Теперь давайте脏手写点代码! Мы будем использовать Node.js для создания не丛ного индекса в MySQL. Сначала убедитесь, что у вас установлен Node.js и пакет mysql2 добавлен в ваш проект.

const mysql = require('mysql2/promise');

async function createNonClusteredIndex() {
try {
// Создаем соединение с базой данных
const connection = await mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database'
});

console.log('Соединение с базой данных MySQL установлено');

// SQL для создания не丛ного индекса
const sql = `CREATE INDEX idx_email ON users (email)`;

// Выполнение SQL
const [result] = await connection.execute(sql);

console.log('Не丛ный индекс успешно создан');

// Закрываем соединение
await connection.end();
} catch (error) {
console.error('Ошибка:', error.message);
}
}

createNonClusteredIndex();

Давайте разберем этот код:

  1. Мы импортируем модуль mysql2/promise, чтобы использовать MySQL с async/await.
  2. Мы определяем асинхронную функцию createNonClusteredIndex().
  3. Внутри функции мы создаем соединение с нашей базой данных MySQL.
  4. Мы определяем наш SQL запрос для создания не丛ного индекса на столбце email таблицы users.
  5. Мы выполняем SQL запрос с помощью connection.execute().
  6. Наконец, мы закрываем соединение.

Когда вы запустите этот скрипт, он создаст не丛ный индекс на столбце email таблицы users. Этот индекс ускорит запросы, ищущие пользователей по их адресу электронной почты.

Практический пример: Использование не丛ного индекса

Теперь, когда мы создали наш индекс, давайте посмотрим, как он улучшает производительность запросов. Рассмотрим этот сценарий:

async function findUserByEmail(email) {
const connection = await mysql.createConnection({
// данные соединения...
});

const [rows] = await connection.execute(
'SELECT * FROM users WHERE email = ?',
[email]
);

await connection.end();

return rows[0];
}

Эта функция находит пользователя по их адресу электронной почты. С нашим новым индексом на столбце email, MySQL может быстро locate правильную строку, не сканируя всю таблицу. Это как иметь超级эффективного библиотекаря, который может мгновенно найти любую книгу, которую вы问他 за!

Заключение

И вот мы и arrived, друзья! Мы прошли через страну не丛ных индексов MySQL, от понимания, что они такие, до их создания и использования с Node.js. Помните, индексы - это мощные инструменты, но используйте их wisely. Слишком много индексов могут превратить вашу быструю базу данных в вялого гиганта.

Продолжая ваши приключения с базами данных, продолжайте экспериментировать с индексами. Попробуйте создавать их в разных столбцах, измеряйте производительность запросов до и после, и смотрите, как происходит магия. И всегда помните: в мире баз данных, эффективность - это король!

Теперь,前进 и индексируйте ответственно! Счастливого кодирования!

Credits: Image by storyset