簡體   English   中英

按順序插入一百萬條記錄並選擇最大

[英]inserting 1 million records with sequence and select max

我試圖使用順序和使用我在下面發布的查詢(使用select max)在測試表中插入100萬行。 令人驚訝的是,具有select max的查詢在11:11(11分11秒)中創建了100萬行

序列查詢會在19:34(19分11秒)中創建100萬行。 現在我不確定哪個好

表格:SitePage

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]

這是查詢

  1. 查詢創建序列

     create Sequence PageTableSequence START WITH 1 INCREMENT BY 1 NO CYCLE NO CACHE ; 
  2. 使用Select max(id)查詢以創建一百萬條記錄

     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 
  3. 使用序列查詢插入一百萬條記錄

     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 

為什么順序有如此差異並選擇最大

嘗試不使用“ NO CACHE”,而應使用“ CACHE 100”,甚至使用1000。 這樣可以減少IO並提高性能。 請參閱http://msdn.microsoft.com/en-us/library/ff878091.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM