我們有這樣的用戶表 - 擁有超過2000萬個條目。MySQL查詢建議 - 列與聯合
CREATE TABLE `users` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) default '',
`email` varchar(64) default '',
`flag` int(10) unsigned DEFAULT '0',
PRIMARY KEY (`uid')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在我們的管理面板中,我們希望顯示一些固定用戶和來自用戶表的搜索結果。
有我們想象的展現銷固用戶(請建議如果任何其他更好的方法)
1)在用戶表中添加一個單獨列固定用戶的兩種方法。然而,與用戶總數(> 20M)相比,固定用戶數量很少(少於100個)。因此,這種方法似乎並不樂觀。
2)固定用戶和使用加入的一個單獨的表,
CREATE TABLE `pinnedusers` (
`uid` int(10) unsigned NOT NULL default 0,
PRIMARY KEY (`uid`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
和運行加入,例如,
select *
from users
left join pinnedusers
on pinnedusers.uid=users.uid
order by pinnedusers.uid desc
limit 200;
然而,我們所擔心的第二個方法的性能因爲它涉及加入,訂購,限制。
你有什麼建議?
第二種方法。 – Strawberry
'flag'確定用戶是否被固定?如果沒有,則有一個「固定位」字段並對其進行索引或使用第二種方法。使用pinnedusers表作爲基礎表,儘管使用內部連接。 –
應該__oin_而不是_joint_。第二種方法是首選的方法,只要索引了適當的列,性能就不成問題。我將使用pinnedusers作爲from表,並且將join(不是左連接)加入到users表中。 –