【发布时间】:2014-06-27 21:16:47
【问题描述】:
我尝试使用序列并使用我在下面发布的查询(使用 select max)在测试表中插入 100 万行。令人惊讶的是,带有 select max 的查询在 11:11(11 分 11 秒)内创建了 100 万行
带有序列的查询在 19:34(19 分 11 秒)内创建了 100 万行。现在我不确定哪个好
表:站点页面
CREATE TABLE [dbo].[SitePage](
[PageID] [bigint] NOT NULL,
[PageName] [nchar](50) NOT NULL,
CONSTRAINT [PK_SitePage] PRIMARY KEY CLUSTERED
(
[PageID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
这里是查询
-
查询创建序列
create Sequence PageTableSequence START WITH 1 INCREMENT BY 1 NO CYCLE NO CACHE ; -
使用 Select max(id) 查询以创建 100 万条记录
DECLARE @intFlag INT SET @intFlag = 0 Declare @maxrecords bigint set @maxrecords = 0 while(@maxrecords<1000000) BEGIN WHILE (@intFlag =0) BEGIN BEGIN TRY Insert into SitePage (PageID, PageName) values ((Select max(PageID)+1 from SitePage),'Some Page Name'); set @intFlag = @@rowcount END TRY BEGIN CATCH SET @intFlag=0 END CATCH END set @maxrecords = @maxrecords+1 set @intFlag=0 END GO -
使用Sequence查询插入100万条记录
Declare @maxrecords bigint set @maxrecords = 0 while(@maxrecords<1000000) BEGIN Insert into SitePage (PageID, PageName) values (next value for PageTableSequence, 'some page name'); set @maxrecords = @maxrecords+1 END GO
为什么sequence和select max会有这么大的差别
【问题讨论】:
-
还有……有什么问题?
-
这很奇怪,我希望序列比使用 max(PageId) 快很多。
-
嗨。看起来你被卡住了,因为你害怕开销问题。有没有办法可以复制你的表,以便你有一个测试表可以使用?这样你就可以亲眼看到。接下来...您熟悉堆栈交换代码审查网站吗?对于那个网站来说,这将是一个很好的问题。考虑你的问题,(哪个更好?)我们不能很好地处理这些类型的开放式问题。 Stack Overflow 主要用于解决问题,发现问题为次要。
-
@FrankTudor 我不认为这是一个“哪个更好”的问题。这是“为什么序列表现如此糟糕”。我想它的措辞可以更好。
-
所以您在一项测试中有所不同。很多事情都在服务器中进行。运行 1000 次。您已经创建了测试表。有什么问题?
标签: sql sql-server tsql