Schema:
CALL (ID,USER_ID(Foreign key),SP_USER_ID(Foreign key))
USER (ID,NAME)
SELECT u.name,
v.name
FROM call c
INNER JOIN USER u
ON c.user_id = u.id
INNER JOIN USER v
ON c.sp_user_id = v.id
Запрос 2:
SELECT u.name
FROM call c
INNER JOIN USER u
ON c.user_id = u.id
Query 2 работает отлично, и результаты приходят слишком быстро.
Но запрос 1 занимает много времени, и иногда клиентский клиент MySQL падает (видя план объяснения, он показывает «JOIN BUFFER» для одной из таблиц USER).
«где» условие на SP_USER_ID или USER_ID несколько дает результаты быстро, но оно не находится в допустимом диапазоне. «Где» условие для других столбцов не имеет никакого эффекта.
Как избежать JOIN BUFFER, чтобы получить более быстрый результат в этом случае и получить желаемые результаты либо путем объединения, либо каким-либо другим способом?
У вас есть три стола или две таблицы? У вас есть еще одна таблица для Super_User? –
Нет. Только 2 таблицы. Таблица CALL и USER.USER имеет всю информацию о пользователе. USER_ID в CALL подобен идентификатору клиента, а идентификатор SP_USER_ID в CALL - это идентификатор человека, который обслуживает/обслуживает этого клиента. Теперь мне нужно присоединитесь к таблице USER, чтобы получить имя как USER_ID, так и SP_USER_ID. – user104309