У меня есть таблица, которая хранит информацию в столбце json с идентификаторами для других таблиц:
CREATE TABLE user_alerts (
id INT NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
criteria JSON NULL DEFAULT NULL,
PRIMARY KEY (id)
)
INSERT INTO user_alerts (user_id, criteria) VALUES (101, '{"salaries": "1,2,3,4,5,6,7,8,9,10,", "industries": "1,37,41,2,39,3,4,5,6,7,8,9,33,10"}');
Я выполняю соединение слева, чтобы получить имена для этих идентификаторов следующим образом:
SELECT DISTINCT a.id,
Group_concat(DISTINCT(i.name) SEPARATOR ', ') industries,
Group_concat(DISTINCT(s.name) SEPARATOR ', ') salaries
FROM alerts a
LEFT JOIN industries i ON Find_in_set(i.id, Json_unquote(Json_extract(a.criteria,'$.industries')))
LEFT JOIN salaries s ON Find_in_set(s.id, Json_unquote(Json_extract(a.criteria, '$.salaries')))
WHERE user_id = 101
Вышеприведенное прекрасно работает, когда наборы маленькие, но каждый раз, когда у вас большой набор, запрос прерывается до точки, где я должен отменить.
Есть ли способ оптимизировать этот запрос или рассмотреть другой метод?