sqlserver 笔记性能优化和用法

上传人:飞*** 文档编号:44138301 上传时间:2018-06-08 格式:DOCX 页数:20 大小:74.57KB
返回 下载 相关 举报
sqlserver 笔记性能优化和用法_第1页
第1页 / 共20页
sqlserver 笔记性能优化和用法_第2页
第2页 / 共20页
sqlserver 笔记性能优化和用法_第3页
第3页 / 共20页
sqlserver 笔记性能优化和用法_第4页
第4页 / 共20页
sqlserver 笔记性能优化和用法_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《sqlserver 笔记性能优化和用法》由会员分享,可在线阅读,更多相关《sqlserver 笔记性能优化和用法(20页珍藏版)》请在金锄头文库上搜索。

1、A.SQL 性能优化性能优化1. 1. 查询的模糊匹配查询的模糊匹配尽量避免在一个复杂查询里面使用 LIKE %parm1% 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用.解决办法:其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:a、修改前台程序把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这列就可以直接用等于来关联了。b、直接修改后台根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个临时表里头,然后再用临时表去做复杂关联2. 2. 索引问题索引问题在做性能跟

2、踪分析过程中,经常发现有不少后台程序的性能问题是因为缺少合适索引造成的,有些表甚至一个索引都没有。这种情况往往都是因为在设计表时,没去定义索引,而开发初期,由于表记录很少,索引创建与否,可能对性能没啥影响,开发人员因此也未多加重视。然一旦程序发布到生产环境,随着时间的推移,表记录越来越多这时缺少索引,对性能的影响便会越来越大了。这个问题需要数据库设计人员和开发人员共同关注法则:不要在建立的索引的数据列上进行下列操作:避免对索引字段进行计算操作避免在索引字段上使用 not,,=,iexec sp_executesql s,Ncon int output,i int,con output ,i s

3、elect con-用exec declare i int,s nvarchar(1000)set i=5select s=declare con int select con=count(1) from sysobjects where ID+rtrim(i)+ select conexec(s)7. 7. sqlsql 语句访问多台服务器数据语句访问多台服务器数据/*跨多个服务器访问不同的表的方法一*先创建链接服务器TESTT,*在MSSQL2008下不能直接修改链接服务器TESTT 的RPC配置成TURE,可以通过语句修改如下: */USE masterGOEXEC master.dbo

4、.sp_serveroption server=NTESTT, optname=Nrpc, optvalue=NtrueGOEXEC master.dbo.sp_serveroption server=NTESTT, optname=Nrpc out, optvalue=NtrueGO-然后通过sql语句访问 select * from TESTT.ONLINE_PAYMENT.dbo.TB_USER/*跨多个服务器访问不同的表的方法二*/-启用Ad Hoc Distributed Queries: exec sp_configure show advanced options,1 recon

5、figure exec sp_configure Ad Hoc Distributed Queries,1 reconfigure -访问语句这样写 select * from openrowset(sqloledb,10.176.24.111;sa;123,ONLINE_PAYMENT.dbo.TB_USER) a-关闭Ad Hoc Distributed Queries: exec sp_configure Ad Hoc Distributed Queries,0 reconfigure exec sp_configure show advanced options,0 reconfigu

6、reC.常用的常用的 sql 文文1. 1. 分页分页 sqlsql1.1 select top PageSize * from UserInfo where Id(select ISNULL(MAX(Id),0) from (select top (PageIndex-1)*PageSize) Id from UserInfo order by Id) as T)order by Id1.2select top PageSize * from (select ROW_NUMBER() over(order by a.Id) as rowid,a.* from UserInfo a) as T

7、where T.rowid(PageIndex-1)*PageSize2. 2. 分页存储过程分页存储过程 1 1create procedure sp_paging PageIndex int,-页码PageSize int,-每页数据条数PagesTotal int output,-总页数RecordTotal int output-总记录数 asbegin-记录总数 select RecordTotal=COUNT(1) from UserInfo a-总页数set PagesTotal=CEILING(RecordTotal*1.0/PageSize)-分页sql select top

8、 (PageSize) * from (select ROW_NUMBER() over(order by a.Id) as rowid,a.* from UserInfo a) as Twhere T.rowid(PageIndex-1)*PageSizeend-删除存储过程 drop procedure sp_paging-执行存储过程 declare records intdeclare pages intexec sp_paging 1,10,pages output,records outputselect records as 记录总数,pages as 总页数结果:3. 3. 分

9、页存储过程分页存储过程 2 2-分页-存储过程 create procedure sp_paging2TableName varchar(100), -分页的表名称TableColumn varchar(2000),-要返回的字段名称,*为全部返回OrderColumn varchar(1000),-排序,必填,不含order by字符,如id asc,userid desc,必须指定asc或descWhere varchar(2000), -筛选条件,不含where,如id1 and len(userid)10PageIndex int,-页码PageSize int,-每页数据条数Page

10、sTotal int output,-总页数RecordTotal int output-总记录数 asbegindeclare SqlCount nvarchar(2000)declare Sql varchar(8000)declare TempTop intset TempTop=(PageIndex-1)*PageSize-判断查询条件是否为空if ISNULL(Where,)+cast(TempTop as varchar)print(Sql)print(SqlCount)exec(Sql)end-删除存储过程 drop procedure sp_paging2-执行存储过程 dec

11、lare records intdeclare pages intexec sp_paging2 UserInfo,UserId,Email,Address,Birthday asc,“Birthday1980-09-01“,1,3,pages output,records outputselect records as 记录总数,pages as 总页数结果:4. 4. 分页存储过程分页存储过程 3 3网上搜的,只能查询一个表CREATE PROC sp_paging/*nzperfect no_mIss 高效通用分页存储过程(双向检索)敬告:适用于单一主键或存在唯一值列的表或视图ps:Sq

12、l语句为字节,调用时请注意传入参数及sql总长度不要超过指定范围 */TableName VARCHAR(200), -表名FieldList VARCHAR(2000), -显示列名,如果是全部字段则为*PrimaryKey VARCHAR(100), -单一主键或唯一值键Where VARCHAR(2000), -查询条件不含where字符,如id10 and len(userid)9Order VARCHAR(1000), -排序不含order by字符,如id asc,userid desc,必须指定asc或desc -注意当SortType=3时生效,记住一定要在最后加上主键,否则会

13、让你比较郁闷SortType INT, -排序规则1:正序asc 2:倒序desc 3:多列排序方法RecorderCount INT, -记录总数0:会返回总记录PageSize INT, -每页输出的记录数PageIndex INT, -当前页数TotalCount INT OUTPUT, -记返回总记录TotalPageCount INT OUTPUT -返回总页数 ASSET NOCOUNT ONIF ISNULL(TotalCount,) = SET TotalCount = 0SET Order = RTRIM(LTRIM(Order)SET PrimaryKey = RTRIM(

14、LTRIM(PrimaryKey)SET FieldList = REPLACE(RTRIM(LTRIM(FieldList), ,)WHILE CHARINDEX(, ,Order) 0 OR CHARINDEX( ,Order) 0BEGINSET Order = REPLACE(Order, ,)SET Order = REPLACE(Order, ,) ENDIF ISNULL(TableName,) = OR ISNULL(FieldList,) = OR ISNULL(PrimaryKey,) = OR SortType 3OR RecorderCount 0BEGINSET ne

15、w_order1 = ORDER BY + OrderSET new_order2 = Order + , SET new_order2 = REPLACE(REPLACE(new_order2,ASC,ASC,),DESC,DESC,) SET new_order2 = REPLACE(REPLACE(new_order2,ASC,DESC,),DESC,ASC,)SET new_order2 = ORDER BY + SUBSTRING(new_order2,1,LEN(new_order2)-1) IF FieldList 0BEGINIF CHARINDEX(SUBSTRING(,+new_order3,1,CHARINDEX(,ne

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号