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

Форум MySQL

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

 

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

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

тема: Что оптимальней - два простых запроса или один сложный?
 
 автор: Qiao   (09.05.2009 в 06:38)   письмо автору
 
 

Привет, народ

Что оптимальней - два простых вопроса или один сложный?
С учётом того, что возвращается одна строка, а не таблица, для обработки они равнозначны.

Например:

SELECT name, cat_id FROM table1 WHERE id=$id
изымаем name и cat_id с помощью php и второй запрос:
SELECT name FROM table2 WHERE id=$cat_id


или

SELECT table1.name, table2.name
FROM table1
LEFT JOIN table2
ON table1.cat_id = table2.id
WHERE table1.id=$id


Что легче для базы - первое или второе?

  Ответить  
 
 автор: tri-edge   (09.05.2009 в 10:19)   письмо автору
 
   для: Qiao   (09.05.2009 в 06:38)
 

обычно все что можно лучше делать в одном запросе
сама по себе посылка запроса лишний раз уже создает дополнительную нагрузку

  Ответить  
 
 автор: ~~   (09.05.2009 в 11:37)
 
   для: tri-edge   (09.05.2009 в 10:19)
 

Qiao, на данном примере нет практически никакой разницы, если id в таблицах PRIMARY KEY. Так что тут скорее смотри в сторону того, что Вам удобнее. Во втором случае Вам еще придётся, кстати, проверить кол-во возвращённых рядов.

Но в общем случае сказать нельзя. И никоим образом не надо думать, как tri-edge: лучше сделать несколько очень простых запросов по тому же PRIMARY KEY, чем 1 навороченный, создающий нагрузку в сотни раз больше.

[поправлено модератором]

  Ответить  
 
 автор: Trianon   (09.05.2009 в 11:48)   письмо автору
 
   для: ~~   (09.05.2009 в 11:37)
 

>И никоим образом не надо думать, как tri-edge: лучше сделать несколько очень простых запросов по тому же PRIMARY KEY, чем 1 навороченный, создающий нагрузку в сотни раз больше.

Если эти несколько простых запросов все организуются по PRIMARY KEY, то и соответствующим образом составленный запрос к сложному табличному выражению тоже будет организован по PRIMARY KEY каждой из таблиц. Так что никакой стократной нагрузки не выйдет.
А выйдет одна строка результата (одна опять же - гарантированно из-за того, что все извлечения будут по PRIMARY (хотя тут в принципе достаточно UNIQUE) KEY .)

Товарищ честно ответил на конкретный вопрос.
Зачем Вы его обложили - неясно совершенно.

  Ответить  
 
 автор: ~~   (09.05.2009 в 11:56)
 
   для: Trianon   (09.05.2009 в 11:48)
 

Это только частный случай с PRIMARY KEY. Автор треда, как мне показалось, спрашивал общий случай.

Товарищ ответил как "обычно все что можно лучше делать в одном запросе". В одном запросе можно теоретически уложить многое и совсем не стоит оно того - смотреть сколько занимает времени вызов функции отправки запроса.

  Ответить  
 
 автор: tri-edge   (09.05.2009 в 13:16)   письмо автору
 
   для: ~~   (09.05.2009 в 11:56)
 

sql вообще то специально создан для быстрой обработки данных, и как раз В ОБЩЕМ случае обработка данных одним запросом происходит быстрее, чем в любом интерпретируемом языке да еще с несколькими обращениями к базе. Исключения бывают - тот же самый order by rand() limit 1 например, или криво составленный запрос, но это к общему случаю не относится

>совсем не стоит оно того - смотреть сколько занимает времени вызов функции отправки запроса.
Это почему не стоит? Вы понимаете разницу между работой интерпретируемого языка и обработкой данных в mysql? Если нужна производиельность - очень даже стоит, если же нет - тогда такого вопроса вообще не должно возникать - делай как больше нравится.

хотя если интересует, что легче именно для базы, а остальное не важно, тут соглашусь, многое зависит от конкретного случая и общее правило вряд ли существует

  Ответить  
 
 автор: ~~   (09.05.2009 в 13:42)
 
   для: tri-edge   (09.05.2009 в 13:16)
 

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

  Ответить  
 
 автор: ~~   (09.05.2009 в 13:48)
 
   для: tri-edge   (09.05.2009 в 13:16)
 

Да и если вы смотрите на производительность с точки зрения сколько будет занимать интерпретация функции в PHP, а на SQL смотреть как "чем меньше, тем лучше", то Вы далеко пойдете. Это примерно тоже самое, что выбирать где купить квартиру в зависимости от стоимости хлеба в ближайшем к дому с квартирой магазину.

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

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