У меня есть таблица "items" с 1 миллионом строк и таблица "users" с 20 000 строк. Когда я выбираю из таблицы «items», я делаю соединение с таблицей «users» (items.user_id = user.id), чтобы я мог получить «username» из таблицы users.
Я рассматриваю возможность добавления столбца имени пользователя в таблицу элементов и удаления объединения. Можно ли ожидать от этого достойного увеличения производительности? Это уже довольно быстро, но было бы неплохо уменьшить мою нагрузку (которая довольно высока).
Недостатком является то, что если пользователь изменяет свое имя пользователя, элементы будут по-прежнему отражать его старое имя пользователя, но это нормально, если я могу ожидать приличного увеличения производительности.
Я спрашиваю stackoverflow, потому что тесты не говорят мне слишком много. Оба запроса заканчиваются очень быстро. Несмотря на это, мне интересно, уменьшит ли удаление объединения нагрузку на базу данных в какой-либо значительной степени.
Пример запроса с объединением:
SELECT Item
. id
, Item
. submitter_id
, Item
. source_image
, Item
. cached_image
, Item
. source_title
, Item
. source_url
, Item
. width
, Item
. height
, Item
. status
, Item
. popular
, Item
. made_popular
, Item
. fave_count
, Item
. tags
, Item
. user_art
, Item
. nudity
, Item
. created
, Item
. modified
, Item
. removed
, Item
. nofront
, Item
. test
, Item
. recs
, Item
. recs_data
, User
. id
, User
. username
, User
. password
, User
. email
, User
. fullname
, User
. profileurl
, User
. homepage
, User
. bio
, User
. location
, User
. avatar
, User
. ff_user
, User
. ff_key
, User
. ff_last_faveid
, User
. twitter_user
, User
. twitter_pass
, User
. emailalerts
, User
. showunsafe
, User
. view
, User
. fb_uid
, User
. fb_session
, User
. fb_avatar
, User
. twitter_uid
, User
. twitter_data
, User
. twitter_autopost
, User
. uri
, User
. created
, User
. modified
ОТ items
AS Item
СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ users
КАК User
ВКЛ (Item
. submitter_id
= User
. id
) ГДЕ Item
. nofront
! = 1 И Item
. removed
! = 1 И Item
. made_popular
- не NULL И ОБНАЖЕНИЕ! = 1 ЗАКАЗАТЬ Item
. made_popular
DESC LIMIT 1040, 290;
Пример запроса без объединения:
SELECT Item
. id
, Item
. submitter_id
, Item
. source_image
, Item
. cached_image
, Item
. source_title
, Item
. source_url
, Item
. width
, Item
. height
, Item
. status
, Item
. popular
, Item
. made_popular
, Item
. fave_count
, Item
. tags
, Item
. user_art
, Item
. nudity
, Item
. created
, Item
. modified
, Item
. removed
, Item
. nofront
, Item
. test
, Item
. recs
, Item
. recs_data
ОТ items
КАК Item
ГДЕ Item
. nofront
! = 1 И Item
. removed
! = 1 И Item
. made_popular
не равно NULL И ОБНАРУЖЕНИЮ! = 1 ЗАКАЗАТЬ ПО Item
. made_popular
DESC LIMIT 1040, 290;