в такой ситуации лучше использовать комбинированный запрос или два отдельных запроса? - PullRequest
0 голосов
/ 11 января 2012

Я объединил эти два запроса:

SELECT  `ad_general`.`id`, `ad_general`.`status`, `ad_general`.`category`, `ad_general`.`type`, `ad_general`.`specification`, `ad_general`.`m2`, `ad_general`.`price`, `ad_general`.`title`, `ad_general`.`city`, `ad_general`.`parabirimi`, `ad_general`.`tarih`, `kgsim_districts`.`isim` as district, `kgsim_cities`.`isim` as city, (
 SELECT `adpictures`.`picturelink`
 FROM `adpictures`
 WHERE `adpictures`.`adid` = `ad_general`.`id` LIMIT 1
 ) AS picture
FROM (`ad_general`)
LEFT JOIN `kgsim_cities` ON `kgsim_cities`.`id` = `ad_general`.`city`
LEFT JOIN `kgsim_districts` ON `kgsim_districts`.`id` = `ad_general`.`district`
WHERE `ad_general`.`city` =  '708'
AND `ad_general`.`status` =  '1'
AND `ad_general`.`category` =  '1'
AND `ad_general`.`type` =  '3'
ORDER BY `ad_general`.`id` desc
LIMIT 15 

SELECT  count(`ad_general`.`id`) as sayi
FROM (`ad_general`)
WHERE `city` =  '708'
AND `status` =  '1'
AND `category` =  '1'
AND `type` =  '3'

В этом запросе:

SELECT  `ad_general`.`id`, (
 SELECT  count(`ad_general`.`id`) as sayi
 FROM (`ad_general`)
 WHERE `city` = 708 AND `status` = 1 AND `category` = 1 AND `type` = 3 ) AS sayi, `ad_general`.`status`, `ad_general`.`category`, `ad_general`.`type`, `ad_general`.`specification`, `ad_general`.`m2`, `ad_general`.`price`, `ad_general`.`title`, `ad_general`.`city`, `ad_general`.`parabirimi`, `ad_general`.`tarih`, `kgsim_districts`.`isim` as district, `kgsim_cities`.`isim` as city, (
 SELECT `adpictures`.`picturelink`
 FROM `adpictures`
 WHERE `adpictures`.`adid` = `ad_general`.`id` LIMIT 1
 ) AS picture
FROM (`ad_general`)
LEFT JOIN `kgsim_cities` ON `kgsim_cities`.`id` = `ad_general`.`city`
LEFT JOIN `kgsim_districts` ON `kgsim_districts`.`id` = `ad_general`.`district`
WHERE `ad_general`.`city` =  '708'
AND `ad_general`.`status` =  '1'
AND `ad_general`.`category` =  '1'
AND `ad_general`.`type` =  '3'
ORDER BY `ad_general`.`id` desc
LIMIT 15 

Мне было интересно, какой из них является лучшим и почему?Потому что это немного сбивает меня с толку из-за того, что в каждом ряду есть результат «сайи».

Ответы [ 2 ]

1 голос
/ 11 января 2012

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

Если вы правильно используете индексы и таблицы кеша, то второй - лучший подход, особенно если у вас много запросов или соединений.

1 голос
/ 11 января 2012

Я бы использовал команду mysql объяснение в обоих запросах и настроил бы БД в зависимости от результатов.

Я бы поддержал подход «все в одном», посколькудает mysql больше информации за один раз, так что он может лучше решить, как запустить поиск.

Однако существует так много переменных.Обычно выполнение объяснения, затем настройка таблиц или индексов и повторное выполнение объяснения дает наилучшую производительность IMHO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...