OS:这里对聚集所以和非聚集所以的概念说明就不叙述了。 身为程序猿,在平时的开发中,数据的操作是经常要做的事情,大多数公司是没有DBA的,所以程序开发人员的在操作数据的时候根本不会去看SQL语句执行的效率,所以就时常的发现大数据的情况下查询数据库总会遇到各种缓慢Loading的情况。 从用户的角度来说,我裤子都脱了,你给我看这个?
CREATE TABLE [dbo].[Student]( [ID] [INT] IDENTITY(1,1) NOT NULL, [Name] [NVARCHAR](50) NOT NULL, [Age] [INT] NOT NULL, [Height] [INT] NOT NULL, [Address] [NVARCHAR](100) NULL, [Class] [NVARCHAR](50) NOT NULL, [EntranceDateTime] [DATETIME] NOT NULL, CONSTRAINT [PK_Student] 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
ALTER TABLE [dbo].[Student] ADD CONSTRAINT [DF_Student_EntranceDateTime] DEFAULT (GETDATE()) FOR [EntranceDateTime] GO
往表里插入 500万数据:
DECLARE @i INT; SET @i=1; WHILE(@i<5000001)BEGIN INSERT INTO dbo.Student(Name,Age,Height,[Address],Class,EntranceDateTime) VALUES('yang_'+CONVERT(NVARCHAR(10),@i),RAND()*10+7,RAND()*100+50,'厦门土豪小区1座'+CONVERT(NVARCHAR(10),CONVERT(INT,RAND()*100+1))+'号',CONVERT(NVARCHAR(10),CONVERT(INT,RAND()*6+1))+'年级',GETDATE()) SET @i=@i+1; END1.合理的使用索引提高查询速度 查询表里,所有年龄为10的名字,如图:
CREATE NONCLUSTERED INDEX [IX_Student_Age_Name] ON [dbo].[Student] ( [Age] ASC ) INCLUDE ( [Name]) 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 、
Ø [Col1] = 3.14 Ø [Col1] > 100 Ø [Col1] BETWEEN 0 AND 99 Ø [Col1] LIKE 'abc%' Ø [Col1] IN (2, 3, 5, 7)然而,在以下谓词上将不能使用索引查找:
Ø ABS([Col1]) = 1 Ø [Col1] + 1 = 9 Ø [Col1] LIKE '%abc'-----------------------------------[我只是美丽的分割线]-----------------------------------------