MYSQL-запрос из оптимизации хранимых процедур - PullRequest
0 голосов
/ 14 марта 2019

У меня есть следующая структура таблицы, которую я пытаюсь оптимизировать:

stores
------------
id | address

products
------------------------
id | name | type | price

Теперь у меня есть хранимая процедура, которая создает временную таблицу store_products:

store_products
-----------------------------------
id | store_id | product_list | type

И код, который заполняет временную таблицу store_products:

INSERT into store_products
    SELECT (
        (100+s.id) AS id,
        s.store_id AS store_id,
        'books' AS type,
        IFNULL(CONCAT(',', CONCAT(GROUP_CONCAT(DISTINCT p.name ORDER BY p.name),',')),'') AS store_products
    FROM
        stores s
    LEFT JOIN products p on p.type = 'books'

INSERT into store_products
    SELECT (
        (200+s.id) AS id,
        s.store_id AS store_id,
        'fruits' AS type,
        IFNULL(CONCAT(',', CONCAT(GROUP_CONCAT(DISTINCT p.name ORDER BY p.name),',')),'') AS store_products
    FROM
        stores s
    LEFT JOIN products p on p.type = 'fruits'

Теперь у меня есть несколько запросов от store_products, которые выглядят так:

SELECT store_id FROM product_list WHERE FIND_INSET('product', product_list)

Это приводит к снижению производительности, так как FIND_INSET () не использует индексы.

Одна идея, которую мне пришлось решить, это использовать какую-то таблицу «многие ко многим» для хранения этой связи между продуктом и магазином. Но я не знаю, как создать его как часть хранимой процедуры.

Может быть, есть еще идеи, как это оптимизировать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...