2015-09-07 3 views
1

Мне бы хотелось, чтобы кто-то помог мне понять, почему выполнение сырого SQL-запроса из ActiveRecord (33,6 с) менее эффективно, чем Mysql (14,0 с).ActiveRecord raw sql медленнее, чем MySql

Запрос заключается в следующем:

SELECT 
     CASE 
     WHEN 
     WeekDay(c.collect_date) >=0 AND WeekDay(c.collect_date) <5 THEN 1 
     ELSE 0 
     END AS is_business_day, 
     HOUR(c.collect_date) consumption_hour, 
     SUM(c.energy), 
     AVG(c.power) 
    FROM consumptions c 
    INNER JOIN devices d ON c.device_id=d.device_id AND d.ftp_id=1  
    GROUP BY CASE WHEN 
     WeekDay(c.collect_date) >=0 AND WeekDay(c.collect_date) <5 THEN 1 
     ELSE 0 
     END, HOUR(c.collect_date) 

И ниже скриншот со временем.

Active Record time

enter image description here

Заранее спасибо!

+0

, потому что вы идете через лишние слои дурачества. Я удивляюсь, что это не займет больше времени. – Drew

+0

Что делает 'consum_tiers'? Типичные запросы Rails занимают намного больше времени, чем обычный SQL, потому что они создают множество объектов. – ahmacleod

+0

@ahmacleod, что область просто выполняет запрос, поэтому это не оправдывает трату слишком много времени. –

ответ

1

Учитывая времена, взятые из профилей (see Rails Github issue), вывод:

впустую время на ActiveRecord похож на Mysql, но медленнее, чем * MySQL Workbench **