Добро пожаловать,
Мне нужно несколько советов, чтобы улучшить работу моего веб-приложения.
В начале у меня была такая структура базы данных:
USER
-id (первичный ключ)
-name
-password
-почта ....
ПРОФИЛЬ
- первичный ключ пользователя, внешний ключ (USER)
-birthday
-области
-фотофайл ...
СТР
-id (первичный ключ)
- Пользовательский внешний ключ (USER)
-page
-date
КОММЕНТАРИИ
-id (первичный ключ)
- Внешний ключ пользователя (USER)
-страница внешнего ключа (PAGE)
-comment
-date
* * FAVOURITES_PAGES тысяча сорок-девять
-id (первичный ключ)
- Внешний ключ пользователя (USER)
-favourite_page Внешний ключ (PAGE)
-date
но сейчас одной из важнейших страниц сайта является обсерватория, где каждый может наблюдать за активностью других пользователей.
Поэтому мне нужно выделить все страницы, комментарии и избранные страницы некоторых пользователей и отобразить их в одном списке, отсортированном по дате.
Для лучшей производительности (я думаю) я изменил свою структуру на это:
table USER and PROFILE without changes
ACTIVITY (additional table- have common fields: user,date)
-id (Primary Key)
-user Foreign Key(USER)
-date
-page Foreign Key(PAGE)
-comment Foreign Key(COMMENTS)
-favourite_page Foreign Key(FAVOURITES_PAGES)
PAGES
-id (Primary Key)
-page
COMMENTS
-id (Primary Key)
-page Foreign Key(PAGE)
-comment
FAVOURITES_PAGES
-id (Primary Key)
-favourite_page Foreign Key(PAGE)
Так что теперь очень легко получить отсортированные записи из всех таблиц.
Но у меня нет только внешнего ключа для PAGES, COMMENTS и FAVOURITES_PAGES в таблице ACTIVITY - есть около десяти полей внешнего ключа, и в одной записи только одно имеет значение, другие имеют None:
ACTIVITY
id user date page comment ...
1 2 2010-02-23 None 1
2 1 2010-02-21 1 None
....
Это основное решение.
Когда я отображаю около 40 записей на одной странице (разбиение на страницы), я должен ждать около секунды, но база данных почти пуста (несколько пользователей и около 100 записей в других таблицах). Это зависит от количества записей на странице - я проверил это, но почему это занимает слишком много времени, из-за отношений?
Сайт построен на Python / Django.
Любые советы / мнения?