【问题标题】:sql server performance optimization on a small fix table小型修复表上的 sql server 性能优化
【发布时间】:2016-07-28 10:19:51
【问题描述】:

现在我有一个小表 [dbo].[Model],它包括两列:id(int) 和 model(nvarchar(48))。

create table Model
(
    id int primary key identity(1,1) not null,
    model nvarchar(48)
)

表中大约有两千条记录,通常不需要插入新记录,除非找到新模型。

现在我有另一个表属性

create table Attribute
(
     id bigint primary key identity(1,1) not null,
     typeid int not null,--foreign key from another table
     modelid int not null,--foreign key from [Model] table
     attr nvarchar(max)
)

现在我应该在[Attribute]表中存储几百万行数据,首先我应该从[Model]表中获取模型id,由于[Model]表很小,如果我经常使用select语句来获取模型 id,我认为这不是一个好主意,因为它包括多重重复选择。

我想我可以只用一个select语句来生成像map这样的数据,当我得到一个模型时,我不需要再选择了,如果它已经存在于map数据中,直接使用它,否则,插入一个新的记录到 [Model] 表中。

以上解决方案是我的猜测,我不熟悉 sql server 或它的性能优化。我应该怎么做才能解决这个问题或者我应该学习什么样的知识?

谢谢。

【问题讨论】:

    标签: sql-server optimization


    【解决方案1】:

    你在正确的轨道上。

    在寻找记录时(无论它是否存在),第一个表的紧凑性会有所帮助。在几千条记录中搜索一条记录比在数百万条记录中进行相同搜索要好得多。

    现在,另一方面,第二个表的性能总是很慢,因为具有不确定大小的 nvarchar(max) 将不利于优化搜索的大多数努力。有些记录的字符串很短,有些记录的字符串很长。

    【讨论】:

    • 谢谢,但我不知道如何从第一个表中只选择一次数据并将它们存储到某个数据结构中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多