|
|
|
| Всем привет. Хочу услышать мнения опытных людей, какой из абсолютно одинаковых запросов лучше?
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)"
|
Индексы я пока не применял, меня другое интересует. | |
|
|