Оптимизировать выборку из 3 таблиц MySQL

Прошу помощи в решении проблемы с очень долгим запросом. буду рад любому совету Есть 3 таблицы tab_1 tab_2 tab_3

Нужно сделать:

  1. В таблице tab_1 сделать выборку столбцов order_id, order_sum, payment_sum, debt, points, mode, payment_date если в столбце user_id есть определенный id пользователя, а также в столбце mode есть записи ordering, payment, newPrice, cancel
  2. В таблице tab_2 найти найти запись с id заказа (order_id) и взять данные из столбца title
  3. В таблице tab_3 найти записи и достать все значение из столбца value где будет в столбцу record запись с id заказа (order_id), а также в столбце name есть записи Name, Status, Printing, Unit, Size, Quantity

Вот сам запрос

SELECT `order_id`, `order_sum`, `payment_sum`, `debt`, `points`, `mode`, `payment_date`,
            (SELECT `title` FROM `tab_2` WHERE `tab_2`.`id` = `order_id`) as 'service',
            (SELECT `value` FROM `tab_3` WHERE `tab_3`.`record` = `order_id` AND `tab_3`.`name` = 'Name') as 'title',
            (SELECT `value` FROM `tab_3` WHERE `tab_3`.`record` = `order_id` AND `tab_3`.`name` = 'Status') as 'status',
            (SELECT `value` FROM `tab_3` WHERE `tab_3`.`record` = `order_id` AND `tab_3`.`name` = 'Printing') as 'printing',
            (SELECT `value` FROM `tab_3` WHERE `tab_3`.`record` = `order_id` AND `tab_3`.`name` = 'Unit') as 'Unit',
            (SELECT `value` FROM `tab_3` WHERE `tab_3`.`record` = `order_id` AND `tab_3`.`name` = 'Size') as 'Size',
            (SELECT `value` FROM `tab_3` WHERE `tab_3`.`record` = `order_id` AND `tab_3`.`name` = 'Quantity') as 'Quantity'
            FROM `tab_1` WHERE `user_id` = $userId 
            AND (`mode` = 'ordering' OR `mode` = 'payment' OR `mode` = 'newPrice' OR `mode` = 'cancel') ORDER BY `id` DESC

Все это работает, но чем больше у пользователя заказов (записей в базе данных), тем запрос становится дольше. У пользователя с 240 записями в tab_2 (основная таблица с заказами), запрос может длиться 6 секунд. Проблема именно в запросах к tab_3 (сейчас там 45000 строк).

Чего хочется достичь:

  1. Упростить запрос к tab_3 (именно из-за него запрос очень долгий)
  2. Изначально сократить запрос по id заказа (order_id), сделав выборку по tab_2 по столбцу state со значением 0

Заранее спасибо!!!


Ответы (0 шт):