Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Какой из запросов лучше?, not exist / left join ... is null
 
 автор: TetRiska   (03.04.2016 в 13:43)   письмо автору
 
 

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

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)"

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования