Всем привет. Хочу услышать мнения опытных людей, какой из абсолютно одинаковых запросов лучше?
| Код | SELECT a.`client_bid_id` FROM `client_bid` a WHERE a.`client_bid_blocked` = 'n' AND NOT EXISTS ( SELECT 1 FROM `client_login` b WHERE b.`client_id` = a.`client_id` AND b.`client_login_type` = 'success' AND b.`client_login_date` > NOW() - INTERVAL 1 HOUR ) |
| Код | SELECT a.`client_bid_id` FROM `client_bid` a LEFT JOIN `client_login` b ON (b.`client_id` = a.`client_id` AND b.`client_login_type` = 'success' AND b.`client_login_date` > NOW() - INTERVAL 1 HOUR) WHERE a.`client_bid_blocked` = 'n' AND b.`client_id` IS NULL |
Прочитал довольно много, но так и не решил для себя - в каких случаях лучше not exits, а в каких - left join ... is null.
not in у меня сразу отпал, как самый худший.
План первого запроса:
| Код | "id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra" "1" "PRIMARY" "a" "ALL" \N \N \N \N "12" "Using where" "2" "DEPENDENT SUBQUERY" "b" "ALL" \N \N \N \N "1" "Using where" |
План второго запроса:
| Код | "id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra" "1" "SIMPLE" "a" "ALL" \N \N \N \N "12" "Using where" "1" "SIMPLE" "b" "ALL" \N \N \N \N "1" "Using where; Not exists; Using join buffer (Block Nested Loop)" |
Индексы я пока не применял, меня другое интересует. |