mysql - медленный запрос строк, отфильтрованных подзапросом, который подсчитывает вхождения их в другую таблицу - PullRequest
0 голосов
/ 10 января 2019

Я хочу отфильтровать коды по крайней мере с 1 штрих-кодом по крайней мере с X вхождениями в таблице магазинов.

структура таблиц

коды таблиц (теперь имеет 1000 записей):

code (PK)

ABC
XYZ

таблица штрих-кодов (теперь имеет 6.000 записей):

barcode (PK)    code

ABC             123
ABC             456
XYZ             789

хранилище таблиц (сейчас 67.000 записей):

id (PK) barcode

1       123
2       123
3       123
4       789

как я могу ускорить этот запрос?

SELECT c.code,
    IFNULL(
        (SELECT COUNT(*) count FROM store s INNER JOIN barcode b ON s.barcode=b.barcode WHERE b.code=c.code GROUP BY a.barcode ORDER BY count DESC LIMIT 1
    ),0) max
FROM codes c
GROUP BY c.code";
HAVING max>=X

при x = 2 ожидаемый результат:

code    max

ABC     3

, потому что только код ABC имеет как минимум 1 штрих-код (123), как минимум, 2 вхождения в таблице хранения.

...