Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Какой из запросов лучше?


Автор: swordfishik 3.4.2016, 13:53
Всем привет. Хочу услышать мнения опытных людей, какой из абсолютно одинаковых запросов лучше?

Код
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)"

Индексы я пока не применял, меня другое интересует.

Автор: tzirechnoy 4.4.2016, 14:56
Цитата
Индексы я пока не применял, меня другое интересует.


И что в таком случае Вас интересует?

Цитата
но так и не решил для себя - в каких случаях лучше 


Кинь монетку.

Автор: _zorn_ 8.4.2016, 17:11
Цитата(tzirechnoy @  4.4.2016,  21:56 Найти цитируемый пост)
Кинь монетку. 

 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)