| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Простейший вопрос по оптимизации |
| Автор: mus 2.9.2008, 20:46 | ||||
| Вопрос из ряда теоретических. В конце вопроса один практический подвопрос. Перешел к изучение CakePHP, отсюда и структура всего действа. Имеются две таблицы - topics и messages, связаны как один-ко-многим. В топиках - название темы, дата создания, в мессагах, соответственно, сами сообщения. Нужно построить запрос, который выведет следующее topics.Название темы | topics.дата_создания | кол-во сообщений в теме (на ум приходит только вложенный запрос, типа (SELECT COUNT(*) messages WHERE topics.topics_id = messages.topics_id) По идее - вложенные запросы создают напряги. Так как давно не программил в принципе, забыл, какая есть у вложенных запросов альтернатива. То ли левое и правое объединение, то ли ещё что...короче, запутался. Теперь ситуация у CakePHP (mvc-фреймворк). Там есть такая мулька, позволяющая ассоциативно связать две модели. Я связал. При запросе $this->findAll(); мы получаем вот такой схематичный массив:
По идее, для того, чтобы вывести нужную мне строку вида (название темы | дата | кол-во сообщений), можно просто взять и при выводе массива на экран в поле кол-во сообщений вбить
Работает и то и другое. Только вот в чем вопрос - представьте, что записей у меня в таблице - около миллиона. Если я с помощью CakePHP свяжу таки эти модели и буду вот так подсчитывать кол-во сообщений, то на мой взгляд, выборка этих сообщений и занесение в массив не рационально с точки зрения используемой памяти. А если мы будем решать вопрос по первому пути, то есть с вложенным запросом, то тоже вроде нагрузка получается, ибо вложенный запрос нагрузка сам по себе. Вот и выбираю из двух зол, забыв, как можно избежать внутренний запрос. А теперь вопрос вполне практический: Господа, какие Вы используете средства для тестирования скорости запроса к базе данных? Вот в моем примере мне нужно создать кучу записей, положим, с пол миллиона, чтобы поглядеть, какой запрос или способ исполняется дольше. Но ведь можно все это как-то имитировать? Может инструменты какие есть, а?.. |
| Автор: Akina 2.9.2008, 21:21 | ||
Хреново, если больше ничего не приходит...
|
| Автор: mus 2.9.2008, 21:56 |
| Akina, спасибо! Я интуитивно понимал, что есть такое решение, но уже напрочь забыл синтаксис. Мне ещё многое предстоит вспомнить. Есть какие рекомендации относительно тестирования скорости запросов с условием имитации их множества?.. Или имитации множества записей?.. Был, вроде, такой инструмент...иль не был... Полгода не программил вообще... Буду иногда ошеломлять вопросами, извините заранее... |
| Автор: mus 2.9.2008, 22:56 | ||
| Akina, что-то, кстати, запрос Ваш не работает... У меня MySQL 5.0.45-community-nt на localhost Пишет
Ругается, что не понимает такой конструкции, как count(m.*) в перечислении филдов... |
| Автор: Deniz 3.9.2008, 07:04 |
| вместо * поставь имя поля первичного ключа |