2015-10-21 3 views
0

Newb on Advanced SQL-запросы, так что спасибо заранее!Mysql Query Optimization for Speed ​​

У меня есть 2 стола, мониторы и статистика. Таблица статистики составляет 1 миллион плюс строки. Я просматриваю мониторы, которые я хочу, а затем запрашиваю таблицу статистики для последней записи. Из-за размера таблицы статистики - он медленный, 15+ секунд.

select `Service`.`monitors`.`host` AS `host`, 
     `Service`.`monitors`.`port` AS `port`, 
     `Service`.`monitors`.`alias` AS `alias`, 
     (select `Service`.`stats`.`value` 
     from `Service`.`stats` 
     where (
      concat('monitor', 
       cast(`Service`.`monitors`.`id` as char charset utf8)) 
      = convert(`Service`.`stats`.`series` using utf8)) 
     order by `Service`.`stats`.`key` desc limit 1) AS `val` 
from `Service`.`monitors` 
where (`Service`.`monitors`.`host` like '%te1%') 

значения stats.key являются UNIX метки времени, но столбец INT и я не могу преобразовать его по разным причинам. Будет ли MAX INT работать быстрее, чем предел 1?

Любые предложения по структуре запросов очень ценятся!

+0

Каков вывод 'EXPLAIN ...'? – jonbaldie

ответ

0

Проблема заключается в том, что ваши данные не очень хорошо организованы в первую очередь; если вам нужно делать операции в каждом месте и вставлять подзапрос, оптимизатор MySQL будет never найти способ оптимизировать ваш запрос и сканировать меньше строк для результата.

+0

Согласен. Я стараюсь как можно больше улучшить производительность, прежде чем переделывать дизайн базы данных. – user3425900