Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Каюсь, только недавно узнал о такой штуке в бд, как индексы. И, честно говоря, не совсем понял, что это и как это использовать в Ларавел.
Как я понял, сам по себе обычный иднекс - это файл, в котором хранится как бы массив значение->запись таблицы. Что бы при запросе сразу брало нужную запись, а не перебирало все в поисках записи, что удовлетворяет условиям.
И вот так можно создать иднекс в ларавеле (в миграции User, например)
$table->index('state');
И-и-и... после этого я могу получить юзера и оно как бы будет быстрее за счёт того, что есть индекс? В общем, не понимаю как-то.
$users = User::where('id', '>', 100)->get();
Изменено Kirir (16.02.2017 17:04:11)
Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20
Не в сети
Вкратце...
$users = User::where('id', '>', 100)->get();
Этот запрос и так использует индекс, т.к. при $table->increments('id') создается индекс.
$table->index('state') нужно создавать в случаях... например, если у вас в таблице с юзерами будет поле age - возраст.
И вы будете выбирать юзеров учитывая возраст.
$users = User::where('age', '>', 29)->get();
В этом случае желательно создать индекс для поля age, что бы не сканировалась вся таблица при выборке.
Выглядеть в миграции это будет так
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
....
$table->unsignedTinyInteger('age')->index();
....
Либо отдельно добавить индекс
$table->index('age');
....
$table->timestamps();
});
Создается индекс и выборка будет быстрее.
.....
В случае, если выборка будет по двум и более полям, то желательно создать уже составной индекс по этим полям.
$table->index(['age','city']);
Такой запрос будет использовать составной индекс
User::where('age', '>', 29)
->where('city', 'Москва')
->get();
Не в сети
В случае, если выборка будет по двум и более полям, то желательно создать уже составной индекс по этим полям.
$table->index(['age','city']);
Добавлю еще:
1) В составных индексах важен порядок колонок.
2) Не делай индексы на все столбцы - каждый индекс замедляет вставку и обновление строк таблицы.
3) Не торопись с созданием индексов, это делать надо аккуратно. Добавить новый индекс - всегда легко, определить какой индекс уже не нужен - проблема. Да и в принципе - чрезмерное количество индексов плохая практика.
4) Если колонка в таблице не обозначена как unique и не является числовым типом - но все значения либо большинство значений колонки уникальные - создавать индекс особо нет смысла.
Твое понимание индекса - key=>value хранилище - вполне корректно.
В общем, не понимаю как-то.
Да, быстрее, за счет сортировки и бинарного поиска.
https://ruhighload.com/post/%D0%A0%D0%B … 0%B2+MySQL
Коротко
Еще разочек для понимания - индекс это не штука фреймворка, это штука базы данных.
Изменено covobo (16.02.2017 20:58:16)
Не в сети
Страницы 1