Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Насколко тяжел запрос 
:(
    Опции темы
02077461
Дата 17.10.2008, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



В процессе роста нужнд приходиться увеличивать запросы к бд. Вот что написал сегодня:

Код

SELECT DISTINCT n.*, i.icon_filename, 
   (SELECT count(*) FROM `se_newscomments` WHERE newscomment_news_id=n.news_id) AS comments_total, 
   (SELECT GROUP_CONCAT(b.bound_type,':',c.name SEPARATOR '#') AS text FROM `se_news_bounds` AS b LEFT JOIN `se_news_countries` AS c ON c.id=b.bound_id AND bound_type='C' WHERE news_id=n.news_id) AS countries, 
   (SELECT GROUP_CONCAT(b.bound_type,':',c.name SEPARATOR '#') AS text FROM `se_news_bounds` AS b LEFT JOIN `se_news_events` AS c ON c.id=b.bound_id AND bound_type='E' WHERE news_id=n.news_id) AS events, 
   (SELECT GROUP_CONCAT(b.bound_type,':',c.name SEPARATOR '#') AS text FROM `se_news_bounds` AS b LEFT JOIN `se_news_desciplines` AS c ON c.id=b.bound_id AND bound_type='D' WHERE news_id=n.news_id) AS disciplines
  FROM `se_news` AS n 
   LEFT JOIN `se_news_sites_ref` AS r ON r.news_id=n.news_id
   LEFT JOIN `se_news_icons` AS i ON i.icon_id=n.news_icon_id 
   LEFT JOIN `se_newscomments` AS c ON c.newscomment_id=n.news_id 
  WHERE r.is_in_spotlight GROUP BY n.news_id, c.newscomment_id

Ответ сервера: 
Цитата

Showing rows 0 - 0 (1 total, Query took 0.0014 sec)
 Это при двух строках в БД. 
Может ли кто-то сказать, как быстро такой запрос положит сервер, точнее, сколько нужно записей в таблице, что бы страница с тремя подобными запросами начала заметно тормозить?
Так же: что из этого запроса наиболее опасно и чего стоит избегать в дальнейшем?.

Спасибо.
PM   Вверх
Kesh
Дата 17.10.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Попытка решить проблемы приложения средствами БД... 
Сразу вопрос, а нужен ли такой запрос?


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
02077461
Дата 22.10.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



Цитата(Kesh @  17.10.2008,  11:20 Найти цитируемый пост)
Попытка решить проблемы приложения средствами БД

Т.е. вы хотите сказать, что нужно выбрать записи новостей, а потом в цикле по всем записям выполнять 3 запроса?.
"Проблема приложения"... хм.. всегда относился к БД как к части приложения. 
Цитата(Kesh @  17.10.2008,  11:20 Найти цитируемый пост)
Сразу вопрос, а нужен ли такой запрос

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

PM   Вверх
Kesh
Дата 22.10.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Что-то не клеится в самой формулировке "только сплитить сконкатенированные строки"... Зачем их склеивать, если потом надо резать?


Цитата(02077461 @  22.10.2008,  20:08 Найти цитируемый пост)
"Проблема приложения"... хм.. всегда относился к БД как к части приложения. 

"Неправильно ты, Дядя Федор бутерброд ешь" (с)

Ладно, не будем играть в угадывания... Попробуйте сгенерить тестовые данные записей эдак на сто... Во-первых увидите "как быстро такой запрос положит сервер", во-вторых, возможно поймете, что фраза 

Цитата(02077461 @  22.10.2008,  20:08 Найти цитируемый пост)
причем мне удобно получить данные таким образом, т.к. потом в цикле можно только сплитить сконкатенированные строки. 


не совсем применима к написанию продукта... В конечно счете важна ведь скорость работы приложения, а не удобство написания.

P.S. Если вы почитаете правила форума, то поймете, что для того, чтобы вам отвечали что-то вразумительное, надо как минимум приводить структуру базы (желательно в виде скрипта с тестовыми данными) + описание, для чего вы все это используете, + кусок кода обработки...

P.P.S. Вы заблуждаетесь, что у вас тут три-четыре запроса... Количество запросов будет расти в геометрической прогрессии с количеством элементов  в выборке.

P.P.P.S Всеми возможными способами избегайте Декарта и Вложенных запросов (что равносильно Декарту)...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Бонифаций
Дата 23.10.2008, 00:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Во первых - при двух строках в базе нет смысла тестировать - план запроса изменится, как только вы заполните базу..
Во вторых - чтобы узнать что получится забейте туда (ну.. сгенерируйте какнить тестовых данных) строк 100-200,
а затем сделайте explain вашзапрос и посмотрите что получится..

Хотя догадывюсь, что получится нехорошо. 
  • distinct n.* приведет практически к гарантированному tempfile, filesort В query plan
  •  несколько субселектов в области полей приведут к тому, что эти четыре запроса будут запускаться на каждую запись из se_news
  •  эти субселекты на самом деле join, и с агрегатной функцией group_concat, то есть количество обращений к базе будет каскадироваться.
  •  group by без единой агрегатной функции в области полй.
Вы не обижайтесь пожалуйста, но если одним словом, то это ужас

Это сообщение отредактировал(а) Бонифаций - 23.10.2008, 00:05


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Kesh
Дата 23.10.2008, 00:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Цитата(Бонифаций @  23.10.2008,  00:03 Найти цитируемый пост)
Вы не обижайтесь пожалуйста, но если одним словом, то это ужас

Да-да-да...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
02077461
Дата 24.10.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



2Бонифаций Огромное спасибо за ваш ответ.


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0460 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.