T-SQL语句创建索引

 SET NOCOUNT ON
  
 -- Configure users
  
 IF (OBJECT_ID('dbo.users') IS NOT NULL)
 BEGIN
 DROP TABLE dbo.[users]
 END
 GO
  
 SET ANSI_PADDING ON
 GO
  
 CREATE TABLE [dbo].[users](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [user_name] [varchar](15) NOT NULL,
 CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED
 (
 [id] ASC
 )WITH (FILLFACTOR = 100, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY]
 GO
  
 DECLARE @UserCount int
 DECLARE @TotalUserCount int
  
 SET @TotalUserCount = 500000
  
 SET @UserCount = 0
 WHILE (@UserCount < @TotalUserCount)
 BEGIN
 SET @UserCount = @UserCount + 1
 INSERT INTO dbo.[users](user_name)
 VALUES('DiggUser'+CONVERT(char(18), @UserCount))
 END
  
 -- Configure friends
 IF (OBJECT_ID('dbo.friends') IS NOT NULL)
 BEGIN
 DROP TABLE dbo.[friends]
 END
 GO
  
 CREATE TABLE [dbo].[friends](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [user_id] [int] NOT NULL,
 [user_name] [varchar](15) NOT NULL,
 [friend_id] [int] NOT NULL,
 [friend_name] [varchar](15) NOT NULL,
 [mutual] [bit] NOT NULL,
 [date_created] [datetime] NOT NULL,
 CONSTRAINT [PK_friends] PRIMARY KEY CLUSTERED
 (
 [id] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY]
  
 GO
  
 -- Setup friend relationships. Power law.
  
 DECLARE @UserCount int
 DECLARE @TotalUserCount int
  
 SELECT @TotalUserCount = MAX(id) FROM users
  
 DECLARE @FriendCount int
 DECLARE @FriendList table(friend_id int)
 DECLARE @FriendDate datetime
 SET @FriendDate = GETUTCDATE()
  
 TRUNCATE TABLE friends
  
 DECLARE @Base float
  
 SET @Base = (@TotalUserCount + 1000) / 1000
  
 -- Setup friend relationships. Power law.
 SET @UserCount = 0
 WHILE (@UserCount < @TotalUserCount)
 BEGIN
 SET @UserCount = @UserCount + 1
 SET @FriendCount = POWER(100, RAND())
 DELETE FROM @FriendList
 WHILE (@FriendCount > 0)
 BEGIN
 INSERT INTO @FriendList(friend_id)
 VALUES(CONVERT(int, POWER(@Base, RAND())*1000)-1000)
  
 SET @FriendCount = @FriendCount - 1
 END
  
 INSERT INTO dbo.friends(user_id, user_name, friend_id, friend_name, mutual, date_created)
 SELECT DISTINCT base.id, base.user_name, friend.id, friend.user_name, 0, @FriendDate
 FROM
 @FriendList f
 JOIN dbo.users base ON base.id = @UserCount
 JOIN dbo.users friend ON friend.id = f.friend_id
 END
  
 GO
 CREATE UNIQUE NONCLUSTERED INDEX [IX_User_To_Friend] ON [dbo].[friends]
 (
 [user_id] ASC,
 [friend_id] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 GO
  
 CREATE NONCLUSTERED INDEX [IX_Friend] ON [dbo].[friends]
 (
 [friend_id] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 GO
  
 -- Diggs
 SET ANSI_NULLS ON
 GO
  
 SET QUOTED_IDENTIFIER ON
 GO
  
 IF (OBJECT_ID('dbo.diggs') IS NOT NULL)
 BEGIN
 DROP TABLE dbo.[diggs]
 END
 GO
  
 CREATE TABLE [dbo].[diggs](
 [id] [int] NOT NULL IDENTITY(1,1),
 [item_id] [int] NOT NULL,
 [user_id] [int] NOT NULL,
 [digdate] [datetime] NOT NULL,
 CONSTRAINT [PK_diggs] PRIMARY KEY CLUSTERED
 (
 [id] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY]
  
 GO
  
 SET NOCOUNT ON
 GO
  
 -- Create ~five hundred million diggs.
 DECLARE @ItemCount int
 DECLARE @TotalItemCount int
 DECLARE @TotalUserCount int
 DECLARE @Diggs int
 DECLARE @UserDiggs table(user_id int, digdate datetime)
 DECLARE @BaseDate datetime
 SET @BaseDate = '2007-01-01'
  
 SELECT @TotalUserCount = MAX(id) FROM users
 SET @ItemCount = 1
 SET @TotalItemCount = 500000
  
 WHILE (@ItemCount < @TotalItemCount)
 BEGIN
 SET @Diggs = RAND() * 2000.0
  
 DELETE FROM @UserDiggs
  
 WHILE (@Diggs > 0)
 BEGIN
 INSERT INTO @UserDiggs(user_id, digdate)
 VALUES(RAND()*@TotalUserCount+1, DATEADD(minute, RAND()*2102400, @BaseDate))
  
 SET @Diggs = @Diggs - 1
 END
  
 INSERT INTO diggs(item_id, user_id, digdate)
 SELECT
 @ItemCount, user_id, MAX(digdate)
 FROM
 @UserDiggs
 GROUP BY
 user_id
  
 SET @ItemCount = @ItemCount + 1
 END
 GO
  
 CREATE NONCLUSTERED INDEX [IX_diggs_item] ON [dbo].[diggs]
 (
 [item_id] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 GO
  
 CREATE NONCLUSTERED INDEX [IX_diggs_user] ON [dbo].[diggs]
 (
 [user_id] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 GO
  
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值