我有一個有100萬行的「items」表和一個有20,000行的「users」表。當我從「items」表中選擇時,我在「users」表(items.user_id = user.id)上做了一個連接,這樣我就可以從users表中獲取「username」。我可以期望從刪除此JOIN中獲得性能提升嗎?
我正在考慮向物品表添加一個用戶名列並刪除連接。我可以期待這樣的表現有不俗的表現嗎?它已經很快了,但是減少我的負載(這非常高)會很好。
缺點是,如果用戶更改他們的用戶名,項目仍然會反映他們的舊用戶名,但如果我可以期待體面的性能提升,這對我來說可以。
我在問stackoverflow,因爲基準測試並沒有告訴我太多。這兩個查詢都很快完成。無論如何,我想知道刪除聯接是否會減輕數據庫的負擔,並達到任何顯着的程度。
連接示例查詢:
選擇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
FROM items
AS Item
LEFT JOIN users
AS User
ON(Item
。submitter_id
= User
。id
)其中Item
。 nofront
!= 1 AND Item
。 removed
!= 1 AND Item
。 made_popular
不是NULL和裸露!= 1 ORDER BY Item
。 made_popular
DESC LIMIT 1040,290;
例子查詢無連接:
選擇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
FROM items
AS Item
WHERE Item
。 nofront
!= 1 AND Item
。 removed
!= 1 AND Item
。 made_popular
不是NULL和裸露!= 1 ORDER BY Item
。 made_popular
DESC LIMIT 1040,290;
當你正在做什麼在你的where子句中選擇什麼? – Avitus 2010-04-08 03:39:38
添加了上面發佈的兩個查詢。 – makeee 2010-04-08 03:59:03
您可以發佈上述查詢的解釋計劃嗎?它看起來像是從用戶表中檢索大量數據。你需要這一切嗎?如果您使用id和名稱爲用戶表建立索引,那麼使用連接檢索user_name應該非常快。 MySQL也應該很容易有效地緩存表。我希望通過刪除每行返回的額外用戶數據而不是刪除用戶表上的快速索引查找來獲得更大的好處。 – TheJacobTaylor 2010-04-08 04:51:46