Как правильно индексировать поля/группы полей в базе данных mysql?
Всем привет! Очень нуждаюсь в совете, как правильно оптимизировать запросы к базе данных mysql. Боюсь напортачить в самом начале, что обернется для меня в последствии большой головной болью.
Есть каталог с товарами, у которых свои атрибуты - категория, пол, возраст, бренд, цвет, материал, сезон, производитель. Все эти поля будут участвовать в выборке/поиске. Но далеко не всегда все сразу. Это могут быть составные запросы по типу:
Категория, пол, наличие
Категория, пол, бренд, цвет, сезон, наличие
Категория, производитель, наличие
и т.д.
Точно всегда будут использованы 2 поля - категория и наличие (Товары, которых нет в наличии в каталоге отображать не нужно, но из базы не удаляются).
Миграция следующая:
```
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name', 100);
$table->string('title', 100);
$table->string('category_title', 50)->index()->nullable();
$table->integer('old_price')->nullable();
$table->integer('price')->nullable();
$table->integer('sale')->nullable();
$table->string('description', 500)->nullable();
$table->string('short_description', 150)->nullable();
$table->string('img_small', 115)->nullable();
$table->string('age', 15)->index()->nullable();
$table->string('gender', 10)->index()->nullable();
$table->string('brand', 50)->index()->nullable();
$table->string('color', 50)->index()->nullable();
$table->string('material', 50)->index()->nullable();
$table->string('seazon', 50)->index()->nullable();
$table->string('country', 50)->index()->nullable();
$table->integer('stock')->default('0')->index();
$table->float('rating')->nullable()->index();
$table->integer('bought')->default('0')->index();
$table->timestamps();
}
В данный момент все поля, участвующие в индексе помечены индексами. Понятно, что при запросе нескольких условий where - это не так уж и полезно. Я пробовал использовать составной индекс:
```
$table->index(['category_title', 'stock', 'gender', 'brand', 'color']);
```
И это работает для такого рода запросов. Но я сильно сомневаюсь, если сделаю декартово пересечение по всем возможным условиям запросов и добавлю туда индексы лучшим решением.
Вопрос - как в такой ситуации правильно реализовать индексные поля? Я заранее благодарен за помощь с решением такого вопроса.