1.聚集索引,填充因子:表示索引的填满程度,数据更新越多,索引建立的次数和空间要的越多,所以要留空的越多,相应的填充因子的填满程序要越小,为了留出更多的空间.
2.sqlserver性能优化的建议:
a)首先查看是否有死锁!!!
b)sql优化:使用分析工具,定位到耗时比较多sql,进一步优化sql;优化sql编写:比如select(*),like,in/not in等;视图或存储过程的建立(严格来说按设计原则尽量减少数据库逻辑的实现,尽量把逻辑放在代码层,存储过程多作为一些工具,比如通用分页存储过程)
c)表结构优化:建立/重建索引,选择合适的填充因子;垂直分库分表(把表字段分割到多个表中);水平分表(两种方式:1分区,把数据水平切割到几个一样结构中的子表中 ;2删除.或者直接冷备份处理只保留一定时间段的数据)
d)硬件升级:升级更高配置的硬件;加更多的服务器实现主从读写分离
f)当以上也不能解决时,考虑数据库集群和分布式/微服务架构实现
3.存储过程使用临时表代替游标
create proc demo_proc
@userid int,
@username varchar(20)
as
declare @id int
declare @name varchar(20)
declare @i int
begin
create table #temp( --建立临时表
id int,
username varchar(20),
sortid int
)
insert into #temp select demo_id,demo_desc,row_number() over(ORDER BY demo_id) from demotable; --临时表插入数据和一个自增字段
set @i=0
while @i<10
begin
select @id=id,@name=username from #temp where sortid=@i+1;
set @i=@i+1
print @id
print @name
end
drop table #temp
end
4.分页
SQL语句分页
select top 10 * --使用子查询的结果查询前10行
from
(select *,ROW_NUMBER() over(order by demo_id) as rownum from demotable) as a --给原表查询结果增加自增字段
where rownum>20;
存储过程分页--事务和错误处理
create proc proc_page
@tablename varchar(50),
@pagesize int,
@curpage int
as
declare @sql nvarchar(200) --自建sql需要使用nvarchar
declare @tranError int
begin
begin tran tran_page --开始事务
begin try --开始异常
set @tranError=0
set @sql='
select top ('+Convert(varchar,@pagesize)+') *
from
(select *,ROW_NUMBER() over(order by demo_id) as rownum from '+@tablename+') as a
where rownum>'+Convert(varchar,@pagesize)+'*('+Convert(varchar,@curpage-1)+');'
exec SP_EXECUTESQL @sql --执行分页sql
end try --结束异常
begin catch --开始处理异常
set @tranError=@tranError+1
end catch
if(@tranError>0) --判断是否有异常
begin
rollback tran tran_page --回滚事务
end
else
commit tran tran_page; --提交事务
end
5.建分表,索引,视图
6.case when then else end用法.
“`
select *,case
when demo_id=1 then '1111' –多条件
when demo_id=2 then '2222'
when demo_id=3 then '3333'
else 'no' end
from demotable;
“`
7.主从
a)发布订阅:https://blog.csdn.net/weixin_42799222/article/details/86579010