У меня есть таблица пользователей с информацией о пользователе и связанной таблицей, которая покажет связанным пользователям с текущим пользователем.Оптимизация связанного запроса таблицы
Чтобы получить соответствующие пользователям идентификатор пользователя «25» мой запрос выглядит
SELECT
id
FROM users u
INNER JOIN (SELECT
primary_id,
secondary_id
FROM users_rel
WHERE primary_id = '25'
OR secondary_id = '25') temp
ON (u.id = temp.primary_id
OR u.id = temp.secondary_id)
WHERE u.id != '25'
вопрос здесь является то, что в users_rel
таблице идентификатор пользователя может быть либо на первичной стороне или на вторичной стороне , Не говорите мне об этом, потому что это уже сделано для 6 миллионов записей, поэтому я не могу его изменить. этот запрос занимает от 2 до 5 минут для выполнения с 4000
записей в таблице user_rel
и 629241
в таблице users
.
user_rel TABLE
.--------------------------------.
| id | (VARCHAR,36) |
| primary_id | (VARCHAR,36) |
| secondary_id | (VARCHAR,36) |
| del | (TINYINT,1) |
|.______________________________.|
и индекс определяется как сочетание primary_id
и secondary_id
Можете ли вы опубликовать, как была разработана схема 'users_rel'? два столбца, объявленные как внешний ключ, или они имеют какой-либо индекс? –
Вы можете использовать '25 IN (\' primary_id \ ', \ secondary_id \') ' – hjpotter92