【SQL Server】性能优化-数据准备:使用存储过程生成百万数据
性能优化-数据准备:使用存储过程生成百万测试数据
- 1 概述
- 2 创建数据库
- 3 建表
- 4 创建存储过程
- 4.1 创建存储过程-学生表
- 4.1 创建存储过程-班级表
- 4.1 创建存储过程-课程表
- 4.1 创建存储过程-成绩表
- 4.1 创建存储过程-给每个班级分配学生人数
- 4.1 创建存储过程-给每个学生分配1个课程的默认100次历史成绩
- 5 生成100万数据
- 6 查询数据
1 概述
在这里我们为什么要去生成100万数据呢?因为在很多实际项目上我们可能会接触到需要进行性能调优的问题,比如碰到某个查询接口特别慢,那么老板或者你的领导就需要你去处理了,为啥让你干呢,你不干谁干,像那种小公司的,公司的后端技术除了你还会有谁,难道你要你的领导去干吗?那是不可能,领导要喝茶,哪有闲工夫陪你玩,优哉游哉不香吗?
在我们做数据库的性能调优之前做一下数据准备,因为数据一旦达到100万级别对查询速度都会产生影响,所以我们就先生成个百万数据玩玩,下面我们开始啦。
基本思路
创建4张表:学生表、班级表、课程表、成绩表,在这里以“学生表”为主表
说明:一个学生只有一个班级,一个学生有多门课的成绩,一个学生在一门课上会有多个成绩(历史成绩,以日期进行历史成绩的区分)
举例:假如在某所高中开设了10
门课程,学校共有30
个班,每班分配n
人,总学生数为30*n
人每个学生每个课程考了m
次,成绩范围是0~100
分
课程:语文、数学、英语、政治、历史、地理、生物、化学、物理、体育;
学生:在这里学生的姓名可以按照输入某个“中文”+ 计数 进行生成,比如以“李欣欣”+n
的方式生成,n
为自然数,举例:李欣欣1,…,李欣欣1000
班级:高一(1)
班 ~(10)
班,高二(1)
班 ~(10)
班,高三(1)
班 ~(10)
班
成绩:每天考一次每门课程,连续考试100
天,从2020-01-01
开始考试,加上100天
即可,每门分数按随机数[0,100]
分生成。
涉及主要知识点
如何创建存储过程
if else语句
数据类型转换
字符串相加
临时表创建
while循环以及双循环问题
[1,100]的随机数生成
2 创建数据库
我们在这里使用命令创建一个DataPerformanceTestDB 的数据库
use master -- 设置当前数据库为master,以便访问sysdatabases表
go
if not exists(select 1 from sysdatabases where name='DataPerformanceTestDB')--DataPerformanceTestDB 百万性能测试数据库create database DataPerformanceTestDB on primary -- 默认就属于primary文件组,可省略(/*--数据文件的具体描述--*/name='DataPerformanceTestDB_data', -- 主数据文件的逻辑名称filename='D:\Data\SQL Server 2014\百万数据性能测试\DataPerformanceTestDB_data.mdf', -- 主数据文件物理存储位置size=5mb, --主数据文件的初始大小--maxsize=100mb, -- 主数据文件增长的最大值,不要限制数据库大小,数据一旦增加到上限则无法使用filegrowth=15%--主数据文件的增长率)log on(/*--日志文件的具体描述,各参数含义同上--*/name='dataPerformanceTestDB_log',filename='D:\Data\SQL Server 2014\百万数据性能测试\DataPerformanceTestDB_log.ldf',-- 日志文件物理存储位置size=2mb,filegrowth=1mb)
go
3 建表
我们开始创建4张表,如下图所示:
use DataPerformanceTestDB
go
--创建4张表:
--“Student学生表”的ClassId 与 ”Class 班级表“的Id 关联
--"Student 学生表"和"Course 课程表"通过"Score 成绩表"的StudentId和CourseId进行关联
if not exists(select 1 from sysobjects where name='Student')--Student 学生表create table Student (Id uniqueidentifier not null primary key,SNo varchar(10), --学号SName varchar(20), --学生姓名SAge int, --年龄SSex bit, --性别:男1,女0ClassId uniqueidentifier, --班级Id,关联班级表)
goif not exists(select 1 from sysobjects where name='Class')--Class 班级表create table Class (Id uniqueidentifier not null primary key,ClNo varchar(20) not null, --班级编号ClName nvarchar(20) not null, --班级名称HeadMasterName nvarchar(20) not null, --班主任TelPhone varchar(50), --班主任电话号码Declaration nvarchar(200) --班级宣言)
goif not exists(select 1 from sysobjects where name='Course')--Course 课程表create table Course (Id uniqueidentifier not null primary key,CName nvarchar(100) not null, --课程名称CRoom nvarchar(100) --教室)
goif not exists(select 1 from sysobjects where name='Score')--Score 成绩表create table Score (Id uniqueidentifier not null primary key,StudentId uniqueidentifier, --学生Id,关联学生表CourseId uniqueidentifier, --课程Id,关联课程表GradeDate datetime not null,--历史成绩日期,对一门课的历史成绩以作区分Score float --成绩)
go
4 创建存储过程
4.1 创建存储过程-学生表
基本思路
根据学生Id
判断数据是否存在;若存在,则再次通过学号SNo
和姓名SName
判断数据是否相同,若相同,则返回标识;若不同则更新数据;若不存在,则插入新的数据
use DataPerformanceTestDB
go
--使用存储过程插入数据
Create proc sp_Insert_Student@Id uniqueidentifier,--唯一标识@SNo varchar(10),--学号@SName varchar(20),--姓名@Age int,--年龄@Sex bit,--性别@ClassId uniqueidentifier,--班级Id@rtn int output--输出
as
--定义临时变量
declare@tempSNo varchar(10),--学号@tempSName varchar(20)--姓名if exists(select * from Student where Id=@Id)--如果id存在beginselect @tempSNo=SNo,@tempSName=SName from Student where Id=@Idif ((@tempSNo=@SNo) and (@tempSName=@SName))beginset @rtn=0 --有相同的数据,直接返回值endelsebeginupdate Student set SNo=@SNo,SName=@SName where Id=@Idset @rtn=2 --有主键相同的数据,进行更新处理endendelse--如果id不存在begininsert into Student values(@Id,@SNo,@SName,@Age,@Sex,@ClassId)set @rtn=1 --没有相同的数据,进行插入处理end
4.1 创建存储过程-班级表
基本思路
根据班级Id
判断数据是否存在;若存在,则再次通过班级号ClNo
和班级名称ClName
判断数据是否相同,若相同,则返回标识;若不同则更新数据;若不存在,则插入新的数据
--使用存储过程插入数据
Create proc sp_Insert_Class@Id uniqueidentifier,--唯一标识@ClNo varchar(20),--班级号@ClName nvarchar(20),--班级名称@HeadMasterName nvarchar(20),--班主任@TelPhone varchar(50),--电话号码@Declaration nvarchar(200),--班级宣言@cl_rtn int output--输出
as
declare@tempClNo varchar(20),--参数:班级号@tempClName varchar(20)--参数:班级名称if exists(select * from Class where Id=@Id)beginselect @tempClNo=ClNO,@tempClName=ClName from Class where Id=@Idif ((@tempClNo=@ClNO) and (@tempClName=@ClName))beginset @cl_rtn=0 --有相同的数据,直接返回值endelsebeginupdate Class set ClNo=@ClNo,CLName=@ClName where Id=@Idset @cl_rtn=2 --有主键相同的数据,进行更新处理endendelsebegininsert into Class values(@Id,@ClNo,@ClName,@HeadMasterName,@TelPhone,@Declaration)set @cl_rtn=1 --没有相同的数据,进行插入处理end
4.1 创建存储过程-课程表
基本思路
根据课程Id
判断数据是否存在;若存在,则再次通过课程名称CName
和教室CRoom
判断数据是否相同,若相同,则返回标识;若不同则更新数据;若不存在,则插入新的数据
use DataPerformanceTestDB
go
--使用存储过程插入数据
Create proc sp_Insert_Course@Id uniqueidentifier,--唯一标识@CName varchar(20),--课程名称@CRoom nvarchar(20),--教室@c_rtn int output--输出
as
--定义临时变量
declare@tempCName varchar(10),@tempCRoom varchar(20)if exists(select * from Course where Id=@Id)--如果id存在beginselect @tempCName=CName,@tempCRoom=CRoom from Course where Id=@Idif ((@tempCName=@CName) and (@tempCRoom=@CRoom))beginset @c_rtn=0 --有相同的数据,直接返回值endelsebeginupdate Course set CName=@CName,CRoom=@CRoom where Id=@Idset @c_rtn=2 --有主键相同的数据,进行更新处理endendelse--如果id不存在begininsert into Course values(@Id,@CName,@CRoom)set @c_rtn=1 --没有相同的数据,进行插入处理end
4.1 创建存储过程-成绩表
基本思路
根据成绩Id
判断数据是否存在;若存在,则再次通过学生Id:StudentId
和课程Id:CourseId
判断数据是否相同,若相同,则返回标识;若不同则更新数据;若不存在,则插入新的数据
use DataPerformanceTestDB
go
--使用存储过程插入数据
Create proc sp_Insert_Score@Id uniqueidentifier,--唯一标识@StudentId uniqueidentifier,--班级Id@CourseId uniqueidentifier,--课程Id@GradeDate datetime,--历史成绩日期,对一门课的历史成绩以作区分@Score float,--成绩@s_rtn int output--输出
as
--定义临时变量
declare@tempStudentId uniqueidentifier,@tempCourseId uniqueidentifierif exists(select * from Score where Id=@Id)--如果id存在beginselect @StudentId=StudentId,@CourseId=CourseId from Score where Id=@Idif ((@tempStudentId=@StudentId) and (@tempCourseId=@CourseId))beginset @s_rtn=0 --有相同的数据,直接返回值endelsebeginupdate Score set StudentId=@StudentId,CourseId=@CourseId where Id=@Idset @s_rtn=2 --有主键相同的数据,进行更新处理endendelse--如果id不存在begininsert into Score values(@Id,@StudentId,@CourseId,@GradeDate,@Score)set @s_rtn=1 --没有相同的数据,进行插入处理end
4.1 创建存储过程-给每个班级分配学生人数
基本思路
- 将
班级表
的所有数据插入到临时表
中; 外循环
临时表
每一条数据,内循环
分配到每个班级的数量数据;- 在
内循环
中针对需要的字段进行赋值并插入数据
use DataPerformanceTestDB
go
-- =============================================
-- Author: love2zq
-- Create date: 2020-09-05
-- Description: 给每个班级分配学生人数
-- =============================================
ALTER procedure [dbo].[sp_Create_AssignStudent]@@sName varchar(10), --学生姓名@n int, --每班人数@classNum int = 1 --分配多少个班级,默认只针对一个班级加学生
as
begin
declare@i int, --数据条数@j int, --循环标识@stuId uniqueidentifier, --学生主键Id@classId uniqueidentifier, --班级主键Id@sNo varchar(10), --学号@sName varchar(10), --学生姓名@count int, --学生数量@rtn int, --学生表输出提示@msg nvarchar(100) --输出提示--把所有班级信息存到临时表select * into #temp from (select Id,ROW_NUMBER() over(order by ClNo) as row from Class) aselect @count = COUNT(1) from #temp;--设置分配班级数量if @classNum > @count set @classNum = @countset @i=1--设置变量i--循环临时表while @i<=@classNum --班级循环beginset @j = 1 --注意:此@j变量一定要放在外循环begin和内循环外部之间,否则无法产生双循环效果while @j<=@n --学生循环beginset @stuId = NEWID()set @sNo = convert(varchar(10), @i) + convert(varchar(10), @j)set @sName = @@sName + convert(varchar(10), @i) + convert(varchar(10), @j)select @classId = Id from #temp where row = @i; --获取班级Idexec sp_Insert_Student @stuId,@sNo,@sName,18,0,@classId,@rtn outputset @j=@j+1endset @i=@i+1enddrop table #temp; --删除临时表
end
4.1 创建存储过程-给每个学生分配1个课程的默认100次历史成绩
基本思路
- 将
学生表
的所有数据插入到临时表
中; 外循环``临时表
每一条数据,内循环
每科成绩的次数;- 在
内循环
中针对需要的字段进行赋值并插入数据
use DataPerformanceTestDB
go
-- =============================================
-- Author: love2zq
-- Create date: 2020-09-05
-- Description: 给每个学生分配1个课程的默认100次历史成绩
-- =============================================
create procedure sp_Create_StudentScore@courseId uniqueidentifier, --课程id@times int = 100 --每个学生每门课程的成绩次数,默认100次
as
begindeclare @stuId varchar(50); --学生iddeclare @count int; --学生数量declare @i int; --循环标识declare @j int; --循环标识declare @scoreId uniqueidentifier; --成绩主键Iddeclare @gradeDate datetime; --历史成绩日期declare @score float; --成绩declare @c_rtn int; --课程表输出提示--把所有学生信息存到临时表select * into #temp from (select Id,ROW_NUMBER() over(order by SNo) as row from Student) aselect @count = COUNT(1) from #temp; --查询临时表总记录数set @i = 1--循环临时表while (@i <= @count)beginset @j = 1 --注意:此@j变量一定要放在外循环begin和内循环外部之间,否则无法产生双循环效果while @j<=@times --考试成绩次数beginset @scoreId = NEWID() --自动生成Idselect @stuId = Id from #temp where row = @i; --获取学生Id set @score = cast(floor(rand()*100) as float) --cast将整型转换为float类型数据set @gradeDate = dateadd(DAY,@j,'2020-01-01') --初始日期为2020-01-01,加上@j天exec sp_Insert_Score @scoreId,@stuId,@courseId,@gradeDate,@score,@c_rtn outputset @j=@j+1endset @i = @i + 1enddrop table #temp; --删除临时表
end
go
5 生成100万数据
由于数据量生成过多,下面的代码执行时间可能过长,需要耐心等待,大概会执行1个小时20分钟左右哦
declare @cl_rtn int,@c_rtn int,@msg nvarchar(100)--输出提示;
--------------------------------------------------------------------------------------------------------------------
---------------------------------------------*******插入班级数据*******---------------------------------------------
--------------------------------------------------------------------------------------------------------------------
exec sp_Insert_Class '3DCEA8D9-92D8-484B-BAC1-DB13F0CB347F','GZ20200101','高一(1)班','刘齐','13385421639','阳光少年,花样少女',@cl_rtn output
--下面输出可加可不加,只是一个提示作用
--begin
if @cl_rtn=0set @msg='课程表=>' + '3DCEA8D9-92D8-484B-BAC1-DB13F0CB347F' + ':已经存在相同的。'
else if @cl_rtn=1set @msg='课程表=>' + '3DCEA8D9-92D8-484B-BAC1-DB13F0CB347F' + ':插入成功。'
elseset @msg='课程表=>' + '3DCEA8D9-92D8-484B-BAC1-DB13F0CB347F' + ':更新成功。'
print @msg
--end
exec sp_Insert_Class 'F441C02F-835A-488B-A70F-71FE96655955','GZ20200102','高一(2)班','刘吉','13385421638','老司机队伍,勇拿第一',@cl_rtn output
exec sp_Insert_Class '760AE59A-D8A5-4B44-B701-E08500378F74','GZ20200103','高一(3)班','李欣颖','13313145201','母语为主,英语为辅',@cl_rtn output
exec sp_Insert_Class '9F28DD25-49CE-4C73-A594-D19B561FD31B','GZ20200104','高一(4)班','李国庆','13313145225','党中央路线是群众路线,你们就是党的群众',@cl_rtn output
exec sp_Insert_Class 'B66763ED-70E9-4F1A-90F7-2F23709A5884','GZ20200105','高一(5)班','朱明朝','13313149225','历史留给人的教训就是从未从历史中得到任何教训',@cl_rtn output
exec sp_Insert_Class 'C0BAD0C9-757A-44FB-898A-21CB86EE5810','GZ20200106','高一(6)班','徐霞客','13313949225','山川大河,地大物博,如画如诗',@cl_rtn output
exec sp_Insert_Class '473D3B0F-B0DB-46A8-A711-31B0CF013924','GZ20200107','高一(7)班','屠呦呦','13613949225','救死扶伤乃本职,奈何医者不自医',@cl_rtn output
exec sp_Insert_Class '1338AA6B-4ADD-4C89-80E6-AA90D1969A3D','GZ20200108','高一(8)班','侯德榜','13316949225','帝国垄断,国中尚无自给自足?',@cl_rtn output
exec sp_Insert_Class 'B0691073-7232-4EC2-BF05-D7449ADC50E6','GZ20200109','高一(9)班','杨振宁','13313949225','一声爆炸,国之骄傲',@cl_rtn output
exec sp_Insert_Class 'E8F75344-0673-493A-8E0D-E54861C603D3','GZ20200110','高一(10)班','子非鱼','13313649225','忍耐克己百折不屈',@cl_rtn outputexec sp_Insert_Class 'D078B827-E046-4FD6-8A64-387A420DF767','GZ20200201','高二(1)班','刘齐','13385421639','阳光少年,花样少女',@cl_rtn output
exec sp_Insert_Class 'AF5CB351-FDE0-482C-8B00-586C1BC0F0AE','GZ20200202','高二(2)班','刘吉','13385421638','老司机队伍,勇拿第一',@cl_rtn output
exec sp_Insert_Class '3FA698FC-4DB8-40FD-A499-59AE804EEA8D','GZ20200203','高二(3)班','李欣颖','13313145201','母语为主,英语为辅',@cl_rtn output
exec sp_Insert_Class '5983885B-8104-4F98-B777-37E39E660DF9','GZ20200204','高二(4)班','李国庆','13313145225','党中央路线是群众路线,你们就是党的群众',@cl_rtn output
exec sp_Insert_Class '94FFFA6C-0A66-4092-BDBF-5A4F3EE2C7DB','GZ20200205','高二(5)班','朱明朝','13313149225','历史留给人的教训就是从未从历史中得到任何教训',@cl_rtn output
exec sp_Insert_Class 'FFB34518-3581-43B5-8BA4-EDB32F036F9F','GZ20200206','高二(6)班','徐霞客','13313949225','山川大河,地大物博,如画如诗',@cl_rtn output
exec sp_Insert_Class '0826DCB4-3393-4706-9EF7-79DCD1C88152','GZ20200207','高二(7)班','屠呦呦','13613949225','救死扶伤乃本职,奈何医者不自医',@cl_rtn output
exec sp_Insert_Class '28A2CEED-21EC-428F-9F22-0BCC95C14CD7','GZ20200208','高二(8)班','侯德榜','13316949225','帝国垄断,国中尚无自给自足?',@cl_rtn output
exec sp_Insert_Class '675214FC-4127-4FFD-81FA-B247FAF00C89','GZ20200209','高二(9)班','杨振宁','13313949225','一声爆炸,国之骄傲',@cl_rtn output
exec sp_Insert_Class '2E7C95FA-5F8B-4724-8EC4-49A1081E7F7C','GZ20200210','高二(10)班','子非鱼','13313649225','忍耐克己百折不屈',@cl_rtn outputexec sp_Insert_Class 'DD11B770-DC0B-4DA1-BCA3-29045852F497','GZ20200301','高三(1)班','刘齐','13385421639','阳光少年,花样少女',@cl_rtn output
exec sp_Insert_Class 'B615B058-E009-4591-8B5C-631965E2816B','GZ20200302','高三(2)班','刘吉','13385421638','老司机队伍,勇拿第一',@cl_rtn output
exec sp_Insert_Class 'DCF72A56-2A9E-46CF-BB54-802443A7CCB0','GZ20200303','高三(3)班','李欣颖','13313145201','母语为主,英语为辅',@cl_rtn output
exec sp_Insert_Class '1B209C00-34ED-4EF9-8F39-BB8363FB60B2','GZ20200304','高三(4)班','李国庆','13313145225','党中央路线是群众路线,你们就是党的群众',@cl_rtn output
exec sp_Insert_Class '2868A43E-7E0D-4FF0-B8C9-3275AB7F80FC','GZ20200305','高三(5)班','朱明朝','13313149225','历史留给人的教训就是从未从历史中得到任何教训',@cl_rtn output
exec sp_Insert_Class '26B9B50F-4928-43BC-9BF0-8F17FFBF0835','GZ20200306','高三(6)班','徐霞客','13313949225','山川大河,地大物博,如画如诗',@cl_rtn output
exec sp_Insert_Class '4B907A49-BED6-4F54-9036-50DA7B346AAF','GZ20200307','高三(7)班','屠呦呦','13613949225','救死扶伤乃本职,奈何医者不自医',@cl_rtn output
exec sp_Insert_Class '53B2B9AC-592E-4CF8-BD87-27FB082CA454','GZ20200308','高三(8)班','侯德榜','13316949225','帝国垄断,国中尚无自给自足?',@cl_rtn output
exec sp_Insert_Class '9D09218A-6ACB-4087-9C47-7D2265CD80E7','GZ20200309','高三(9)班','杨振宁','13313949225','一声爆炸,国之骄傲',@cl_rtn output
exec sp_Insert_Class '09E4C136-640A-4EE1-B9F7-18446F5E4230','GZ20200310','高三(10)班','子非鱼','13313649225','忍耐克己百折不屈',@cl_rtn output --------------------------------------------------------------------------------------------------------------------
---------------------------------------------*******插入课程数据*******---------------------------------------------
--------------------------------------------------------------------------------------------------------------------
exec sp_Insert_Course '43650D43-CDA5-4F81-934F-2DF9B03038A0','语文','1教1101',@c_rtn output
--下面输出可加可不加,只是一个提示作用
--begin
if @c_rtn=0set @msg='课程表=>' + '43650D43-CDA5-4F81-934F-2DF9B03038A0' + ':已经存在相同的。'
else if @c_rtn=1set @msg='课程表=>' + '43650D43-CDA5-4F81-934F-2DF9B03038A0' + ':插入成功。'
elseset @msg='课程表=>' + '43650D43-CDA5-4F81-934F-2DF9B03038A0' + ':更新成功。'
print @msg
--end
exec sp_Insert_Course '8C35128B-4AD1-4506-861B-A96F41072FDD','数学','1教1102',@c_rtn output
exec sp_Insert_Course '12A0C937-A570-4E3A-A5A9-D4841387E617','英语','1教1103',@c_rtn output
exec sp_Insert_Course '31AD3945-AB92-4F83-8CB9-19B01389B61F','政治','1教1104',@c_rtn output
exec sp_Insert_Course 'AA571527-97B1-4C3E-A651-ECA8B505B991','历史','1教1105',@c_rtn output
exec sp_Insert_Course 'DC3BB0A9-A046-4900-AFB1-76B850A937D7','地理','1教1106',@c_rtn output
exec sp_Insert_Course '6DA53E65-E564-4D4C-A7A0-966B0EE0FC65','生物','1教1107',@c_rtn output
exec sp_Insert_Course 'F1E0C121-3FFE-4F9C-825E-BB19EC43A4F9','化学','1教1108',@c_rtn output
exec sp_Insert_Course '7529A8CD-403B-45B5-8274-3E352558CF31','物理','1教1109',@c_rtn output
exec sp_Insert_Course 'BCBD9E50-602B-4097-9DD7-8E8CD751AA04','体育','1教1110',@c_rtn output--------------------------------------------------------------------------------------------------------------------
---------------------------------------------*******插入学生数据*******---------------------------------------------
--------------------------------------------------------------------------------------------------------------------
--给予每个班100人,30个班即 30*100 = 3000人
exec sp_Create_AssignStudent '李思思',100,30--------------------------------------------------------------------------------------------------------------------
---------------------------------------------*******插入学生成绩数据*******---------------------------------------------
--------------------------------------------------------------------------------------------------------------------
--给予每个学生每门课程200次历史成绩,共有3000人*10门课*200次=600,0000数据
exec sp_Create_StudentScore '43650D43-CDA5-4F81-934F-2DF9B03038A0',200 -- 语文,200次成绩
exec sp_Create_StudentScore '8C35128B-4AD1-4506-861B-A96F41072FDD',200 -- 数学,200次成绩
exec sp_Create_StudentScore '12A0C937-A570-4E3A-A5A9-D4841387E617',200 -- 英语,200次成绩
exec sp_Create_StudentScore '31AD3945-AB92-4F83-8CB9-19B01389B61F',200 -- 政治,200次成绩
exec sp_Create_StudentScore 'AA571527-97B1-4C3E-A651-ECA8B505B991',200 -- 历史,200次成绩
exec sp_Create_StudentScore 'DC3BB0A9-A046-4900-AFB1-76B850A937D7',200 -- 地理,200次成绩
exec sp_Create_StudentScore '6DA53E65-E564-4D4C-A7A0-966B0EE0FC65',200 -- 生物,200次成绩
exec sp_Create_StudentScore 'F1E0C121-3FFE-4F9C-825E-BB19EC43A4F9',200 -- 化学,200次成绩
exec sp_Create_StudentScore '7529A8CD-403B-45B5-8274-3E352558CF31',200 -- 物理,200次成绩
exec sp_Create_StudentScore 'BCBD9E50-602B-4097-9DD7-8E8CD751AA04',200 -- 体育,200次成绩
6 查询数据
--查询关联数据
select a.SName,b.ClName,d.CName,d.CRoom,c.Score from Student a
left join Class b on a.ClassId = b.id
left join Score c on a.Id = c.StudentId
left join Course d on c.CourseId = d.Id
--清空数据
delete from Class;delete from Student;delete from Score;delete from Course
【SQL Server】性能优化-数据准备:使用存储过程生成百万数据相关推荐
- SQL Server性能优化与管理的艺术 附件下载地址
首先感谢读者们对鄙人的支持,购买了<SQL Server性能优化与管理的艺术>,由于之前出版社的一些疏忽,附件没有上传成功,再次本人深表歉意. 请需要下载附件的读者从下面链接下载,谢谢: ...
- SQL Server 性能优化之——系统化方法提高性能
原文 http://www.cnblogs.com/BoyceYang/archive/2013/06/15/3138142.html 阅读导航 1. 概述 2. 规范逻辑数据库设计 3. 使用高效索 ...
- SQL SERVER性能优化综述
近期因工作需要,希望比较全面的总结下SQL SERVER数据库性能优化相关的注意事项,在网上搜索了一下,发现很多文章,有的都列出了上百条,但是仔细看发现,有很多似是而非或者过时(可能对SQL SERV ...
- SQL Server性能优化案例报告
. 问题分析 1.1 现象描述 某企业客户内部知识管理系统基于微软SharePoint服务器产品并进行了应用扩展开发,NLB负载均衡部署,后台数据库采用SQL Server 2 ...
- SQL SERVER性能优化综述(转载)
from:http://blog.csdn.net/Haiwer/archive/2008/08/25/2826881.aspx 近期因工作需要,希望比较全面的总结下SQL SERVER数据库性能优化 ...
- SQL Server性能优化
http://blog.csdn.net/chyliu/archive/2007/11/06/1870539.aspx 如果你曾经做了很长时间的DBA,那么你会了解到SQLServe的性能调优不是一个 ...
- linux sql server调优,SQL SERVER性能优化(转)
[IT168技术文档] 1. 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数:通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担:能够分开的操作尽量分开处理,提高每次的 ...
- SQL SERVER性能优化-查询速度提高
近段时间去面试,很多都会问到关于SQL语句优化及大数据量数据查询速度提升的问题,但是由于我个人之前开发都是一知半解的状态,很多东西都没能掌握明白,感觉自己就是菜鸟一枚,晕死,和朋友闲聊聊到查询效率的提 ...
- SQL SERVER 性能优化四: 创建分区表
1.整体介绍 1.1 分区表概念:分区表值得是逻辑上是一个表,物理上被存储到不同的磁盘文件中. 1.2 优势:提高查询性能:提高稳定性:便于管理:对于大数据量表备份更方便. 1.3 建立分区表主要包含 ...
最新文章
- Linux 环境下如何安装部署 RocketMQ 教程
- AI 芯片和传统芯片的区别
- Design Pattern - Prototype(C#)
- Ubuntu 18.04上进行HyperLedger Fabric 1.2.0环境及链码安装、部署和测试
- java连接mysql数据库jdbc
- 程序幽默:会让程序员争论起来的几个话题
- html5测试 iphone6sp,5款旧iPhone测试iOS运行速度:只有6S速度明显提升
- python server酱_用Python抢到回家的车票,so easy
- PAT 乙级 1029. 旧键盘(20) Java版
- vue项目实现详情页后退缓存之前的数据
- 云计算数据与信息安全防护
- bat批处理常用命令
- 分析思维模型:SPACE 矩阵
- 三级行政区划 mysql_全国三级行政区划数据 常用查询语句
- Spring学习笔记(四)--spring配置文件schema约束
- 谷歌浏览器安装 elasticsearch-head 插件
- sql 中判断身份证男女等
- 济南市公安局交警支队辅警信息管理系统
- android 系统自带的软件可以删除列表--Defy
- python读取mssql文件_python 读取mssql数据库中文的搜索结果-阿里云开发者社区