Задать вопрос

Как правильно сделать выборку товаров по 100 параметрам (EAV)?

Добрый день.
Дано: база товаров на 2 млн. строк.
Структура базы EAV
В таблице зависимостей названий характеристик и значений порядка 15 млн строк.
Задача - возможность все это как-то фильтровать, причем убирая заведомо тупиковые варианты в disable.
Делать сотни Select and and and - понимаю, что глупо, запихнуть все это в sphinx?
Может быть, просчитывать варианты заранее?
На хабре нашел такую вот статью https://habrahabr.ru/post/114113/ но из нее, к сожалению, особо ничего так и не понял.

Кто-нибудь сможет пояснить (разжевать)? либо подсказать еще варианты реализации задачи.
Спасибо.
  • Вопрос задан
  • 862 просмотра
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Не думаю, что эта статья решит все Ваши вопросы, но что бы понять ее надо вначале покурить тут:
http://ruhighload.com/post/Работа+с+индексами+в+MySQL
и тут:
https://habrahabr.ru/post/70640/
Ответ написан
Комментировать
@miksir
IT
Раз вам нужно убирать неподходящее в disable, то на реляционной базе, да еще с EAV - это будет ад, как по коду, так и по производительности.

Самое очевидное решение тут брать подходящие для этих задач решения, например, elasticsearch. Вот, например, статья про такой вариант https://blog.madewithlove.be/post/faceted-search-u...
Ответ написан
Комментировать
EgoRusMarch
@EgoRusMarch
C++ Developer
Предлагается использовать битовые поля.
В один INTEGER ты упакуешь 32 BOOL. Это уже даст больше пользы, чем индексация.
INTEGER должен быть быстрее BIGINT. То есть будет несколько полей (4), вместо 100 с лишним.
Хранение набора чекбоксов в одном поле БД. Битовая...
Ответ написан
@hector
php программист
На мой взгляд, ускорение поиска нужно делать через денормализацию: или собирать индекс в отдельную таблицу или делать индекс чрез sphinx\elasticsearch. Обновлять индекс по крону или программно (при сохранении модели, к примеру)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы