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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Оптимизация больших запросов

Сообщения:  [1-10]    [11-20]  [21-27] 

 
 автор: Woland   (26.07.2007 в 11:54)   письмо автору
 
   для: Trianon   (26.07.2007 в 11:20)
 

Спасибо за информацию. А где можно почитать о "правилах хорошего тона" при составлении запросов? Я, конечно, не знаю, всех тонкостей... В данном случае запрос выполняется, с нормальной скоростью, да ну и пусть. А в будущем может и пригодиться. Даже этот запрос подправлю

   
 
 автор: Trianon   (26.07.2007 в 11:20)   письмо автору
 
   для: Woland   (26.07.2007 в 10:58)
 

Я имею в виду , что ни
SELECT base_severity,id_host FROM messages JOIN mnemonics USING (id_mnemonic)... GROUP BY base_severity
ни тем более SELECT * FROM table... GROUP BY base_severity
не являются запросами однозначной трактовки.

В приличных серверах такие запросы будут вызывать сообщения об ошибках:
Column 'messages.id_host' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
а не выдавать результат.

   
 
 автор: Woland   (26.07.2007 в 10:58)   письмо автору
 
   для: Trianon   (25.07.2007 в 09:16)
 

Не понимаю, в чем суть вопроса.
Вы имеете в виду, что GROUP BY находится во внешнем запросе, а не в подзапросе?

   
 
 автор: Trianon   (25.07.2007 в 09:16)   письмо автору
 
   для: Woland   (25.07.2007 в 05:58)
 

А GROUP BY?

   
 
 автор: Woland   (25.07.2007 в 05:58)   письмо автору
 
   для: Trianon   (24.07.2007 в 18:41)
 

Но поле id_mnemonic в таблице `mnemonics` ключевое, и id_mnemonic в таблице `messages` является внешним ключом, соответственно, между всеми записями этих таблиц есть соответствие "1:N"

   
 
 автор: Trianon   (24.07.2007 в 18:41)   письмо автору
 
   для: Woland   (24.07.2007 в 18:35)
 

Полагаю, как только Вы напишете LEFT JOIN , перформанс упадет вниз.
У Вас, похоже, куча записей, в которых id_mnemonic либо не задано либо не найдено в таблице mnemonics.
Ну и левый GROUP BY тоже однозначность в ситуацию не вносит.

   
 
 автор: Woland   (24.07.2007 в 18:35)   письмо автору
 
   для: Woland   (20.07.2007 в 17:16)
 

Нашел решение вопроса. Выглядит следующим образом:

SELECT *,count(*) AS cnt
FROM
  (SELECT base_severity,id_host
  FROM messages JOIN mnemonics USING (id_mnemonic)
  WHERE syslog_date>(NOW()-interval 1 hour) ) AS res
WHERE id_host=1
GROUP BY base_severity

Запрос выполняется очень быстро. Судя по всему, проблемы с оптимизатором базы данных?

   
 
 автор: Woland   (24.07.2007 в 16:00)   письмо автору
 
   для: Trianon   (24.07.2007 в 15:58)
 

Нет, ни один из них

   
 
 автор: Trianon   (24.07.2007 в 15:58)   письмо автору
 
   для: Woland   (24.07.2007 в 15:45)
 

А остальные обслуживающие запросы индексы не восстанавливают?
CHECK TABLE messages;
ANALYZE TABLE messages;
OPTIMIZE TABLE messages;

   
 
 автор: Woland   (24.07.2007 в 15:45)   письмо автору
 
   для: Trianon   (24.07.2007 в 15:12)
 

>а с чего Вы решили, что их всего 15?

Из PHPmyAdmin

   

Сообщения:  [1-10]    [11-20]  [21-27] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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