|
|
|
| Привет, народ
Что оптимальней - два простых вопроса или один сложный?
С учётом того, что возвращается одна строка, а не таблица, для обработки они равнозначны.
Например:
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
|
Что легче для базы - первое или второе? | |
|
|
|
|
|
|
|
для: 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 навороченный, создающий нагрузку в сотни раз больше.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: ~~
(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. Автор треда, как мне показалось, спрашивал общий случай.
Товарищ ответил как "обычно все что можно лучше делать в одном запросе". В одном запросе можно теоретически уложить многое и совсем не стоит оно того - смотреть сколько занимает времени вызов функции отправки запроса. | |
|
|
|
|
|
|
|
для: ~~
(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 смотреть как "чем меньше, тем лучше", то Вы далеко пойдете. Это примерно тоже самое, что выбирать где купить квартиру в зависимости от стоимости хлеба в ближайшем к дому с квартирой магазину. | |
|
|
|