2015-10-21 143 views
0

高级SQL查询Newb先谢谢您!速度Mysql查询优化

我有2个表,监视器和统计。统计表是100万行加上行。我查看我想要的显示器,然后查询最新条目的统计表。由于统计表的大小 - 它很慢,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优化器决不会找到一种方法来优化您的查询并扫描结果的较少行。

+0

同意 - 我试图在重做数据库设计之前尽可能提高性能。 – user3425900