我有以下表结构 -SQL Server:设计:嵌入式Select语句或INNER JOIN?
网站:主tablefor网站
组织:师父组织
表用户:用户主表(每个用户链接到一个独特的组织通过 User.OrgId)
OrgSite:存储一些'组织特定'网站详细信息(OrgId,SiteId,SiteName, SiteCode)。并非所有网站,但只有 组织可以访问的网站。
UserSite:将用户链接到他可访问的网站(UserId,SiteId)。 当用户链接到Org UserSite 将成为OrgSite表的一个子集。
ItemSite:表用于存储一些项目&网站具体细节(项ID, SITEID,ORGID,...)
现在,我已经从 'ItemSite' 过滤\显示记录而且我还需要显示Sitecode。所以,我看到下面的两个选项 -
1.创建一个视图: vw_ItemSite_UserSite_OrgSite(INNER JOIN上SITEID所有表) - 这会给我访问所有的“OrgSite”表中提供的组织具体细节(即SITECODE,等..)
如果你能注意到我已经为包括 “OrgSite”只因为我想 具体组织SITECODE & SITENAME的看法。 因为UserSite已经过滤网站 - 所以我可以 '排除'OrgSite表和 消除不必要的INNER JOIN。
2.根据上述注 - 第二个选项是创建一个视图:vw_ItemSite_UserSite和“选择”的VIEW我可以嵌入以下SELECT样的语句 -
CREATE VIEW vw_ItemSite_UserSite AS
SELECT ItemSite.SiteID,
(SELECT TOP 1 [SiteCode] FROM OrgSite WHERE OrgId = ItemSite.OrgId) AS SiteCode,
...
FROM ItemSite INNER JOIN UserSite ON ItemSite.SiteId = UserSite.SiteId
我唯一的意图是 - 我相信INNER JOIN和WHERE将在评估嵌入式select语句之前进行评估。那么,这是否为我节省了一些性能?或者是让vw_ItemSite_UserSite_OrgSite更好的想法。
选项#1或选项#2?
谢谢。
那么,你是说选项#1和选项#2与性能观点相似吗?因为选项#1显然更简单和直接选择! – 2009-11-18 14:43:49
我不是说任何一个都更好。我所说的只是运行一些测试并看看。在你的情况下设置一个测试来做这件事有多难?如何做的最好的指标是运行测试,并根据您的发现得出结论。我总是非常怀疑有人告诉我,选项1或选项n是最好的选择,没有真实的事实。 – Kuberchaun 2009-11-18 15:13:59