Нетерпеливая загрузка полиморфных ассоциаций в ActiveRecord

Если Вы знаете, что данные являются определенно интервалом тогда int myInt = (int)x;, должна быть самая быстрая опция. Иначе TryParse поможет Вам разобраться в нем без замедления исключений.

BTW:

(интервал) только распаковывает поэтому быстрее,

(международные) IL =

  .locals init (
        [0] object x,
        [1] int32 Y)
    L_0000: ldc.i4.1 
    L_0001: box int32
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: unbox int32
    L_000d: ldobj int32
    L_0012: stloc.1 
    L_0013: ret 

Преобразовывают. Toint32 =

.locals init (
        [0] object x,
        [1] int32 Y)
    L_0000: ldc.i4.1 
    L_0001: box int32
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: call object [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::GetObjectValue(object)
    L_000d: call int32 [mscorlib]System.Convert::ToInt32(object)
    L_0012: stloc.1 
    L_0013: ret 
6
задан Ryan Bigg 10 October 2009 в 02:21
поделиться

2 ответа

After digging through the Rails source I've discovered that you can force a join by referencing a table other than the current model in either the select, conditions or order clauses.

So, if I specify an order on the Asset table:

Image.first(
      :conditions => {:id => id},
      :include => :asset,
      :order => "asset.id"
)

The resulting SQL will use a left outer join and everything in one statement. I would have preferred an inner join, but I guess this will do for now.

2
ответ дан 17 December 2019 в 07:07
поделиться

Я сам столкнулся с этой проблемой. ActiveRecord больше склоняется к тому, чтобы упростить для рубистов (которые, возможно, даже не слишком хорошо знакомы с SQL) взаимодействие с базой данных, чем с оптимизированными вызовами базы данных. Возможно, вам придется взаимодействовать с базой данных на более низком уровне (например, DBI) для повышения производительности. Использование ActiveRecord определенно повлияет на то, как вы проектируете свою схему.

Стремление к эффективности SQL заставило меня задуматься об использовании других ORM. Я не нашел ни одного, подходящего для моих нужд. Даже те, кто больше ориентируется на сам транзакционный SQL (например, Sequel), имеют тяжелый Ruby API. Я был бы доволен без Ruby-подобного API и просто вручную написал бы свой T-SQL. Настоящая выгода, которую я получаю от ORM, - это M, отображающая набор результатов (одной или нескольких таблиц) в объекты.

1
ответ дан 17 December 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: