Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.02.2017 17:03:57

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

Каюсь, только недавно узнал о такой штуке в бд, как индексы. И, честно говоря, не совсем понял, что это и как это использовать в Ларавел.

Как я понял, сам по себе обычный иднекс - это файл, в котором хранится как бы массив значение->запись таблицы. Что бы при запросе сразу брало нужную запись, а не перебирало все в поисках записи, что удовлетворяет условиям.

И вот так можно создать иднекс в ларавеле (в миграции User, например)

$table->index('state');

И-и-и... после этого я могу получить юзера и оно как бы будет быстрее за счёт того, что есть индекс? В общем, не понимаю как-то.

$users = User::where('id', '>', 100)->get();

Изменено Kirir (16.02.2017 17:04:11)


Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20

Не в сети

#2 16.02.2017 18:28:59

skiphog
Откуда: Киров, Россия
Сообщений: 26

Re: Как использовать индексы в Laravel

Вкратце...

$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();

Не в сети

#3 16.02.2017 20:56:17

Re: Как использовать индексы в Laravel

skiphog пишет:

В случае, если выборка будет по двум и более полям, то желательно создать уже составной индекс по этим полям.

$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)

Не в сети

Подвал раздела