Что не так с этим MYSQL Query - PullRequest
1 голос
/ 18 марта 2011
    SELECT * FROM event JOIN user ON event.event_user_id=user.user_id
  WHERE ((event.event_date BETWEEN '2011-03-01' AND '2011-04-01' ) 
    AND user.user_id in (SELECT user_id FROM user_map 
      WHERE (user_map.user_id_map=1 AND user_map.user_relation<=7)));

Это нормально работает в Toad / MYsql, но не работает, когда я делаю это с подготовленным оператором в драйвере java + mysql как

    SELECT * FROM event JOIN user ON event.event_user_id=user.user_id
  WHERE ((event.event_date BETWEEN ? AND ? ) 
    AND user.user_id in (SELECT user_id FROM user_map 
      WHERE (user_map.user_id_map=? AND user_map.user_relation<=?)));

...

pstmt.setDate(1, <sqlDate>);
pstmt.setDate(2, <sqlDate>);
pstmt.setLong(3, <int>);
pstmt.setLong(4, <int>);

pstmt.executeQuery();

1 Ответ

1 голос
/ 18 марта 2011

Это не тесно связано с проблемой, но запрос не эффективен и может быть улучшен

SELECT * 
FROM   event 
       JOIN USER 
         ON event.event_user_id = USER.user_id 
       JOIN user_map 
         ON user_map.user_id = USER.user_id 
            AND user_map.user_id_map = 1
            AND user_map.user_relation<=7 
WHERE  ( event.event_date BETWEEN '2011-03-01' AND '2011-04-01' ) 
GROUP  BY USER.user_id 

вам нужны индексы на

  • (event.event_user_id, event.event_date)
  • (USER.user_id)
  • (user_map.user_id, user_map.user_id_map, user_map.user_relation)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...