2016-11-23 2 views
-1

Мне нужно стол с отношением.Что лучше? city.state.id или city.state_id

государственный

  • идентификатор
  • имя

Город

  • идентификатор
  • имя
  • состояние

Что лучше в исполнении?

city.state.id или city.state_id

+0

Вы пытались сделать бенчмарк? Доступ к состоянию ранее? – Sayse

+0

@Sayse Нет чувак. Я не знаю, как я могу сделать бенчмарк! и состояние не доступно! – Chalist

ответ

3

city.state_id лучше в любом случае. city.state сделает еще один выбор из базы данных. Вы можете избежать этого, используя select_related. Если вам нужен только id ключа foriegn, вам не нужно select_related здесь. Просто сделайте city.state_id (так как идентификатор ключа foriegn будет извлекаться в запросе, который дает объект city).

1

city.state_id лучше city.state.id. Потому что он делает только запрос вместо двух.

BTW, вы можете использовать Django Debug Toolbar для отладки запросов.

1

<field>_id поле вы видите это имя базы данных столбца

docs

За кулисами, Django добавляет «_id» к имени поля, чтобы создать его имя столбца базы данных. В приведенном выше примере, таблица базы данных для модели автомобиля будет иметь manufacturer_id колонки

Таким образом, это означает, что не нужно делать отдельный запрос для получения экземпляра внешнего ключа (см Select a single field from a foreign key для более подробной информации).

Но это предполагает, что вы не использовали select_related или prefetch_related

+0

что такое 'select_related' разница в этом случае? – Chalist

+0

[".... означает, что позднее использование отношений внешнего ключа не потребует запросов к базе данных."] (Https://docs.djangoproject.com/en/1.10/ref/models/querysets/#select-related) – Sayse

Смежные вопросы