– item (price, description, created, updated).
Во второй таблице хранятся так называемые «свойства товара» – item_field (item_id, field_id, value).
Есть ещё третья таблица, где хранятся сами свойства – field (title, description), но мы их пока что не затрагиваем, оно не влияет на процесс (там ещё есть field_value с интернационализацией и т.д.).
Проблема: в таблице item уже примерно 50к записей, в таблице item_field – 500k. Выборка занимает до 1 секунды. 8 ядер, 32 гб оперативки. Дальше – хуже. Выборка делается с джойнами. Отдельно инфа о товаре, отдельно список значений с названиями полей.
Какие индексы городить и/или куда смотреть в этой ситуации?
item: (item_id) item_field (item_id, field_id, value) (field_id, value, item_id)
EAV вообще работает (разнообразно, в т.ч. в плане производительности некоторых запросов) плохо (т.е. думать надо было раньше, перед тем, как использовать эту "модель"). Впрочем, покажите \d таблиц, запрос(ы) и их EXPLAIN (ANALYZE, BUFFERS).
Обсуждают сегодня