sql基础知识

回表:先确定主键ID,在查询行级记录。

覆盖索引:

create table(

id int(10) primary,

name varchar(32) not null,

sex varchar(10) not null,

index(name)

)

select name,id from table where name='zhangsan'

这时候会在name里面找到id和name,就可以不用回表,提高查询速度

而当select id,name,sex from table where name='zhangsan'

这个时候就命中name索引,索引的叶子节点会存储主键id,但是不会存储sex,因此需要回表。

而将索引升级成联合索引就不一样了,

create table(

id int(10) primary,

name varchar(32) not null,

sex varchar(10) not null,

index (name,sex)

)

这时候就会使用覆盖索引。

使用覆盖索引进行优化:表table1(id,name,sex)、

select count(name) from table1;

可以优化为: alter table  table1 add key name

select count (name) from table1;

这样子就会进行索引覆盖

如何进行索引修改呢?

方法一:

若一开始有索引:

先删掉:alter table table1 drop index index1;

再创建  alter table table1 add unique index1(name,sex) using btree;//创建唯一索引

                alter table table1 add index index1(name,sex)//创建普通索引

                alter table table1 add primary key (id)//创建主键索引

方法二 :

create index index2 on table1(name)

create unique index3 on table1(name)  

存储过程:

create proc proc1(

@bl1 varchar(10)=‘zhangsan’//全局变量

@bl2 varchar(10)

as 

begin

declare @bl2 varchar(10)//局部变量

set @bl2='wangwu'

set @bl3=(select name from table1)

select

end

)

exec proc1 'lisi'

 也可以把变量的内容输出,使用output

create proc StuProc
@sname varchar(100),
@IsRight int  output //传出参数
as 
if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)
set @IsRight =1
else
set @IsRight=0
go

declare @IsRight int 
exec StuProc '赵雷' , @IsRight output
select @IsRight

在SQL Server查询编辑器窗口中用CREATE PROCEDURE语句创建存储过程PROC_InsertEmployee,用于实现向员工信息表(tb_Employee)中添加信息,同时生成自动编号

其SQL语句如下:

IF EXISTS (SELECT name  
   FROM   sysobjects  
   WHERE  name = 'Proc_InsertEmployee'  
   AND          type = 'P') 
DROP PROCEDURE Proc_InsertEmployee 
GO 
CREATE PROCEDURE Proc_InsertEmployee 
@PName nvarchar(50), 
@PSex nvarchar(4), 
@PAge int, 
@PWage money 
AS 
begin 
   declare @PID nvarchar(50) 
   select @PID=Max(员工编号) from tb_Employee 
   if(@PID is null) 
       set @PID='P1001' 
   else 
       set @PID='P'+cast(cast(substring(@PID,2,4) as int)+1 as nvarchar(50)) 
   begin 
       insert into tb_Employee values(@PID,@PName,@PSex,@PAge,@PWage) 
   end 
end 
go 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值