Rails: есть ли последствия для производительности наследования одной таблицы? - PullRequest
1 голос
/ 26 октября 2019

Используя Rails (5.2.3) и Postgres (9.6.6), я планирую новую модель для большой таблицы (~ 20 миллионов строк и подсчет, изначально).

Я пытаюсьрешить, использовать ли наследование одной таблицы (STI) или нет. Интересно, какие последствия для производительности могут или не могут быть.

Разумное обоснование использования STI, конечно же, заключается в том, что в каждом дочернем классе можно определить собственную логику / методы, которые будут относиться только к нему.

(Надеюсь, будет полезно использовать enum для хранения целых чисел в столбце type, что бы это ни стоило.)

Вот как я представляю вещи с помощью STI:

class Vehicle < ApplicationRecord
  self.inheritance_column = "make"

  enum make: {
    acura: 0,
    benz: 1,
    # ...
    volvo: 27,
  }

  enum body_style: {
    coupe: 0,
    hatchback: 1,
    sedan: 2,
  }
end

class Acura < Vehicle
end

# get Acura sedans since 2007
Acura.sedan.where("year >= ?", 2007)

Вот как я представляю вещи без ИППП:

class Vehicle < ApplicationRecord
  enum make: {
    acura: 0,
    benz: 1,
    # ...
    volvo: 27,
  }

  enum body_style: {
    coupe: 0,
    hatchback: 1,
    sedan: 2,
  }
end

# get Acura sedans since 2007
Vehicle.acura.sedan.where("year >= ?", 2007)

Являются ли они полностью эквивалентными с точки зрения производительности? Если нет, то что я пропускаю?

...