Куда идут индексы при использовании STI? - PullRequest
3 голосов
/ 28 декабря 2011

Я использую Rails и Postgres.

У меня есть пара моделей, использующих STI, и мне было интересно, где я должен поместить индексы в таблицы и почему?

Например, допустим, у меня есть следующие настройки:

class Comment < AR; end
class MovieComment < Comment; end
class MagazineComment < Comment; end


# Fake Comment Table
id:integer
title:string
body:text
type:string

Спасибо!

Ответы [ 2 ]

7 голосов
/ 28 декабря 2011

В поле type, если вам нужен только один из MovieComment или MagazineComment.Если вы этого не сделаете, вам не понадобится индекс.Я не уверен, что AR использует type каждый раз, но просто чтобы убедиться.

Поскольку поле id является первичным ключом, индекс уже должен быть там.

Если вы хотите выполнить запрос как по type, так и по id, убедитесь, что у вас есть объединенный индекс.

В других полях: Зависит от того, что вы запрашиваете, но я полагаю, что вы хотите получить только эти.

0 голосов
/ 10 октября 2016

Как правило, вам нужны индексы в столбцах, которые вы будете использовать при выполнении запросов.

Если вы сделаете MovieComment.find(10), база данных будет использовать индекс в поле id, которое Rails добавит автоматическидля тебя.То же самое, если вы сделаете Comment.find(30): Rails получит комментарий с id 30, используя индекс, затем прочитает столбец type и вернет MovieComment или MagazineComment.

Например, если вы собираетесь добавить функцию для поиска по названию, вам нужно будет также создать индекс в этом столбце.В этом случае, вероятно, индекс : fulltext .

Индекс в столбце type сделает запрос как MagazineComment.all быстрее, поскольку он эквивалентен Comment.where(type: 'MagazineComment').all, но этовероятно не стоит.

...