如何在另一个表的列上索引SQL表
我有下面的模式-让我们假设有两个国家,A和B。 国家A有1000个团队,而国家B有100000000个——如果我想根据团队所在的国家快速查询结果,我将如何构建索引 如果这有帮助的话,球队就不能改变国家如何在另一个表的列上索引SQL表,sql,sql-server,indexing,Sql,Sql Server,Indexing,我有下面的模式-让我们假设有两个国家,A和B。 国家A有1000个团队,而国家B有100000000个——如果我想根据团队所在的国家快速查询结果,我将如何构建索引 如果这有帮助的话,球队就不能改变国家 索引表取决于了解实际模式 对于这个简单的表模式,我将只在表之间创建Trusted FK,至少这是我的第一次尝试 假设Countryid,Teamid,Resultid是自动递增的 CREATE TABLE Country (id INT IDENTITY(1, 1) PRIMAR
索引表取决于了解实际模式 对于这个简单的表模式,我将只在表之间创建
Trusted FK
,至少这是我的第一次尝试
假设Countryid
,Teamid
,Resultid
是自动递增的
CREATE TABLE Country
(id INT IDENTITY(1, 1) PRIMARY KEY,
CountryName VARCHAR(100) NOT NULL
);
CREATE TABLE Team
(id INT IDENTITY(1, 1) PRIMARY KEY,
TeamName VARCHAR(100) NOT NULL,
CountryID INT NOT NULL
);
ALTER TABLE dbo.Team
WITH CHECK
ADD CONSTRAINT FK_Team_CountryID FOREIGN KEY(CountryID) REFERENCES dbo.Country(id);
ALTER TABLE dbo.Team
WITH CHECK CHECK CONSTRAINT FK_Team_CountryID;
--Just verify that newly created FK is trusted or not.
SELECT name,
is_disabled,
is_not_trusted
FROM sys.foreign_keys
WHERE name = 'FK_Team_CountryID';
CREATE TABLE Result
(id INT IDENTITY(1, 1) PRIMARY KEY,
TeamId INT NOT NULL,
Result INT NOT NULL
);
-- I hv no idea how you are storing Result,so ignore it
ALTER TABLE dbo.Result
WITH CHECK
ADD CONSTRAINT FK_Result_TeamId FOREIGN KEY(TeamId) REFERENCES dbo.Team(id);
ALTER TABLE dbo.Result
WITH CHECK CHECK CONSTRAINT FK_Result_TeamId;
可能是在看到真实查询的查询计划后,我将
对结果表进行去规范化,以添加Countryid
,但现在不需要,因为country表很小我认为在索引视图中连接这些表是您需要的。首先构造您的查询。然后担心性能。我们只能假设您已经完成了家庭作业,并且深思熟虑地选择了聚集索引以及添加的索引来支持外键。1亿的数字看起来更像是一个巨魔,而不是现实——但严重扭曲的数据通常需要不同的方法来构建高效的查询。请添加要优化的特定查询。像这样的情况可以从过滤/部分索引中受益匪浅,但是如果不查看特定的查询,就很难回答。首先搜索a国的团队,这必须是一个简单的查询。优化第二个查询,因为您已经知道它在国家/地区,但不知道这意味着什么:“如果我想根据团队所在的国家/地区快速查询结果”。这是否意味着您有两个查询——本质上——一个返回A中的所有团队,另一个返回B中的所有团队?