我的桌子以性能方式的最佳结构:[关闭]

Posted

技术标签:

【中文标题】我的桌子以性能方式的最佳结构:[关闭]【英文标题】:best structure of my table in Perfomance way: [closed] 【发布时间】:2014-04-04 01:44:43 【问题描述】:

我有两个不同的数据库架构

第一个结构是:

table 1 :    country_master
Column name: id(primary key)   country_name    

table 2:     State_master
Column name: id(primary key) State_name Country_id(foreign key of country_master)

table 3:     City_Master
Column name: id(primary key) city_name State_id(foreign key of State_master)

第二个结构是:

table 1 :    Master_table
Column name: id(primary key)   name    

table 2 :    Sub_master
Column name: id(primary key) name master_id(Foreign key of master Table) subid(id of Sub_master)

第一个结构的记录

table: Country_master
1  india
2  UK
3  USA


table:State_master
1 gujarat 1
2 MP      1
3 Up      1

table:City_master
1 ahmedabad 1
2 surat     1

结构2的记录:

table:master_table
1 Country
2 City
3 State

table:master_table
1  india      1 0
2  UK         1 0
3  USA        1 0
4  Gujarat    3 1
5 MP          3 1
6 Up          3 1
7 ahmedabad   2 4 
8 surat       2 4

现在我的问题是我的表的最佳性能模式是什么:

【问题讨论】:

您应该在三个表中的名称上创建聚集索引。这使您的选择语句更快。您尚未提供它也会影响性能的字段的数据类型。 【参考方案1】:

我认为你的第二个表结构不完整。这里 parentid 可以是非聚集索引,type 可以是非聚集索引。table 变量只是举例说明

Declare @t table (id int identity(1,1) primary key,names varchar(100)
,parentid int,[type] int)

--where [type] can be enum 1=country,2=states,3 city

    insert into @t values ('india',null,1) ,('gujrat',1,2) 
,('surat',2,3) ,('Bihar',1,2),('Pakistan',null,1)

;with CTE as
(
select * from @t where id=1
union all
select a.* from @t a inner join cte b on a.parentid=b.id
)
select * from cte

恕我直言,优点是如果城市不是强制性的。那么在第一个表中 您必须使用左连接的结构。在第二个例子中,无论是 要求您始终可以使用内连接。因此第二个结构是 快。另外第二个更灵活。只需一个 proc 就可以了

。 虽然让其他评论。

【讨论】:

【参考方案2】:

第二个结构将在性能方面产生更多问题。 由于子表具有所有引用,因此难以维护。考虑这样一个场景,您需要标记每个拥有数百万数据的州的“首都”,那么您将如何在现有表中再添加一列并更新每一列?不是很明显,相反,更好的工作是将所有城市、州和国家分隔在一个单独的表中,并用于具有连接的查询,因此连接在主键上执行。最重要的是,这些数据通常不会改变,这意味着这些数据在大多数情况下都保持不变。这些称为查找,因此您需要在表格中分开。第一种结构第一次出现很好,因为数据集太小,随着数据的增加,会产生问题,因此最好使用第一种结构。

【讨论】:

【参考方案3】:

您可以通过在表上添加正确的索引来获得相同的性能。

例如:如果您的查询是搜索一个国家/地区的所有州,则需要在第二个结构中的子表的主 ID 和子 ID 上创建索引。

【讨论】:

以上是关于我的桌子以性能方式的最佳结构:[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

讨论,iOS 编程的最佳方式? [关闭]

在 iOS 中拥有这种复杂的水平和垂直滚动结构的最佳方式是啥? [关闭]

关闭 Access Jet OledbConnection 的最佳方式

从 Java/C# 到 C++ 的最佳方式是啥? [关闭]

定位用户的最佳方式[关闭]

组织数据的最佳方式[关闭]