sajor2006
@sajor2006
Ну я человек. )

Почему запрос Висит и без ответа?

На всех условиях есть index.

SELECT u.timestamp ,u.login, app.id appId, a.id aId, b.id bId, ah.id ahId, ah.date_time, ah.as_revealed, ah.user_id, ah.barrier_id
				FROM `user` u
				LEFT JOIN attribut_app app ON u.id = app.user_id
				LEFT JOIN barrier b ON app.barrier_id = b.id AND b.manager_id IS NULL /*не будет работать если у объекта появится */
				LEFT JOIN access a ON SUBSTRING(u.login,2) = SUBSTRING(a.access_number,2) AND deleted = '0000-00-00 00:00:00' /*получаем все возможные доступы это ползователя по нашим */
				LEFT JOIN access_history ah ON DATE_SUB(NOW(), INTERVAL 30 DAY ) <= ah.date_time AND (ah.access_id = a.id OR ah.user_id = app.user_id) /*история  за полседние 30 дней*/
				WHERE u.key IS NOT NULL
				ORDER BY u.timestamp DESC


Если убрать этот кусок запрос проходит OR ah.user_id = app.user_id

Все что в join по отдельности проходят.
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если в левой части условий JOIN, WHERE или HAVING используются функции, то индексы по данным выражениям не работают, что сильно замедляет запрос.
Ну и надо посмотреть размер исходных таблиц и селективность JOIN'ов. Может у вас строится картезианское произведение на 10000005 строк.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы