Добрый день имеется такая структура бд.
Мне необходимо выбирать все коллекции по заданным параметры, для коллекции необходимо две картинки. в зависимости от параметров, картинки могут быть как товара(plitka_tovar.img), так и с картинки где они именно находятся. (interior_goods.img)
Вот структура всего этого такая.
прошу дать какие либо наводки на решение , а то запросы по 4-8 секунд это треш.
mysqli_query($this->db, 'SET @row_number = 0;');
mysqli_query($this->db, 'SET @collection = 0;');
SELECT t2 .* FROM(SELECT t1 .*,
@row_number:=
CASE WHEN @collection = t1 . collection_id
THEN @row_number + 1
ELSE 1 END AS num, @collection:=t1 . collection_id AS collection
FROM(SELECT
linkVisual,factory_name,factory_id,collection_name,collection_id, 1 as type
FROM
(SELECT
plitka_tovar . id,
plitka_tovar . Poverhnosty,
plitka_tovar . Material,
plitka_tovar . Tekstura,
plitka_tovar . tip,
plitka_tovar . Vid_izdeliya,
plitka_tovar . `S_Facetom(Kabanchik)`,
plitka_tovar . Tehnicheskiy_keramogranit,
interior_goods . imgnew AS linkVisual,
plitka_fabrika . Nazvanie AS factory_name,
plitka_kollekciya . Nazvanie AS collection_name,
plitka_fabrika . id AS factory_id,
plitka_kollekciya . id AS collection_id,
plitka_kollekciya . collection_link
FROM
plitka_tovar,
_article,
interior_point,
interior_goods,
plitka_kollekciya,
plitka_fabrika
WHERE
_article . id_part = '18'
AND _article . id_product = plitka_tovar . id
AND interior_point . article = _article . id
AND interior_goods . id = interior_point . id_goods
AND plitka_fabrika . id = plitka_tovar . Fabrika
AND plitka_kollekciya . id = plitka_tovar . kollekciya)
$table
$where
UNION
SELECT t1 . imgnew as linkVisual,t2 . Nazvanie as factory_name,t2 . id as factory_id, t3 . Nazvanie as collection_name, t3 . id as collection_id, 2 as type
FROM plitka_tovar as t1, plitka_fabrika as t2, plitka_kollekciya as t3 $table
WHERE t1 . Fabrika = t2 . id AND t3 . id = t1 . Kollekciya $whereTov
GROUP BY concat(collection_id, linkVisual)
ORDER by
collection_id,type
) as t1) as t2
WHERE t2 . num <= 2
ORDER BY t2 . collection_name,t2 . collection
mysqli_query($this->db, 'SET @row_number = 0;');
mysqli_query($this->db, 'SET @collection = 0;');
эти строки я использую для выборки двух картинок, для одной коллекции
$where $table - это те доп таблицы, в случае если к ним есть запрос.
У меня такой вопрос, как это упростить, потому что в таком режим у меня запрос идет очень долго, чересчур долго.
Индекс сделаны для таблиц.
Таблицы не связаны с помощью ключа, ну то есть это на прямую не прописано, это упущение в плане скорости или нет?
Кэш базы данных использую.
Буду благодарен любым наводкам и информации