背景:
公司生产系统数据库中的一个功能,显示了来自很多字段的值,以“/” 分隔,产生的问题是,如果某几个字符没有内容的话,那显示出来的效果就可能会出现多个“/” 相连。如“////////////////” 我们需要将这么多“/” 变成一个”/”。
解决方案:
使用SQL 自定义的函数,循环地将所有的“//” 变成”/” 即可。
Create function [dbo].[ReplaceFG](@string varchar(1000),@old varchar(50),@new varchar(50))
RETURNS varchar(1000)
AS
begin
declare @temp varchar(1000)
while CHARINDEX(@old,@string) > 0
begin
set @string = Replace(@string,@old,@new)
set @temp = @string
end
return @temp
end
示例代码如下:
select dbo.ReplaceFG(’sa/////////////00000////////dg///////sdf’,'//’,'/’) value
value
———————-
sa/00000/dg/sdf
(1 row(s) affected)
–王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com
–原帖地址
如果你曾经做了很长时间的DBA,那么你会了解到SQLServe的性能调优不是一个精密的科学。即使是,对于为最佳的性能找到最佳的配置也是很困难的。这是因为对于调优来说很少东西是绝对的。例如,一个性能调优可能对某一方面有用,可是却会影响其他的性能。
我曾经做过DBA,在最后7年的日子里,我总结了一套SQLServer调优的清单。当第一次进行SQLServer性能调优的时候,可以用它来作为一个向导。我经常被邀请去检查SQLServer并提供一些性能方面的建议。直到现在,我还没有真正写下一个贯穿整个性能调优过程的方案。但是当我做了越来越多的性能调优的咨询工作后,我现在决定花点时间整理出来。你将会发现它是很有用的,就象我发现对我的用处一样.
SQLServer性能监控
这套性能优化的清单将至少准科学的帮助你找出你的SQLServer任何明显的性能问题。说是这样说,SQLServer的性能调优仍然是很困难的。我试图用这套清单去找出“容易”的sqlserver性能问题,困难的留待稍后。我这样做是因为很容易将容易和困难的的性能调优问题搞混。通过列出一个“容易”的性能调优范围,就很容易的将这些问题解决,一旦解决了这些容易的问题,那么你就能集中去解决更困难的问题。
使用这个SQLServer性能调优清单的一个好处是,它将不仅仅告诉你目前最容易解决的性能问题是什么,而且还帮助你正确的去解决。在某种程度上,你可以选择不同的顺序进行。换句话说,你可以故意做出特殊的决定而不是按照清单通常的顺序进行。某种意义上说你是对的,不是所有的性能调优建议都适合所有的情形。另外,你的决定是基于你的资源限制,例如没有足够的钱去买满足负荷的硬件。如果真是那样的话,你就别无选择了。还有,你的决定可能基于一些政治原因,那是你不得不作出的改变。不管怎样,你需要知道你能做什么,使用这个性能调优清单找出你能改变的范围并做出相应的改变提升你的SQLServer的性能。
一般来说,你将在你的每一个SQL服务器上执行这个清单。如果遇到清单中的一些问题,这会花掉你一些时间。我建议你从目前性能问题最多的的服务器开始,然后当你有时间的时候按照自己的思路去解决其他服务器。
一旦你完成了,可仍然有很多事情要去做。记住,这些只是一些容易的。一旦你完成了这些容易的,接下来你需要花时间去解决更困难问题。这个是另一篇文章要解决的问题了。
为了使其变得容易,我把它们分成了以下几个部分:
- 使用性能监视器找出硬件瓶颈
- SQLServer硬件性能监控列表
- 操作系统性能监控列表
- SQLServer2000配置性能监控列表
- 数据库配置设置性能监控列表
- 索引性能监控列表
- 应用程序和T-SQL性能监控列表
- SQLServer数据库作业性能监控列表
- 使用Profiler找出低效的查询
- 怎样最好的实现SQLServer性能监控
管理你的SQLServe性能的最好方法是首先回顾上面每一部分的内容,把它们打印出来。然后完成每一部分的内容,写下你收集到的结果。你也可以按照你喜欢的顺序进行。上面的步骤仅仅列出了我执行的顺序,因为那样通常能达到一个比较好的效果。
一旦你完成其中一部分,你可以按照在清单中发现的不同的建议进行你的性能优化工作。然后你将在后面的部分学到更多。
因文章太长,请下载word版全文:
怎样查出SQLServer的性能瓶颈
通过设置STATISTICS我们可以查看执行SQL时的系统情况。
选项有PROFILE,IO ,TIME。介绍如下:
SET STATISTICS PROFILE ON:显示分析、编译和执行查询所需的时间(以毫秒为单位)。
SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数、逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁盘的次数)有关的信息。
SET STATISTICS TIME ON:显示每个查询执行后的结果集,代表查询执行的配置文件。
使用方法:打开SQL SERVER 查询分析器,输入以下语句:
SET STATISTICS PROFILE ON
SET STATISTICS io ON
SET STATISTICS time ON
Go –你的SQL脚本开始
Select * From Customer where name like ‘江苏扬子江药业%’
Go –你的SQL脚本结束
SET STATISTICS profile OFF
SET STATISTICS io OFF
SET STATISTICS time OFF
1. 嵌套子查询
Select a,b,c from Table1 where a in (Select a from Table2)
2. 提前5分钟显示
Select * from Table1 where datediff(minute, Getdate(), 开始时间字段) <5
3. 显示文章、提交人和最后回复时间
Select A.title, A.username, B.adddate From tablename a, (Select max (adddate) adddate from tablename where tablename.title=a.title) B 备注:这个是从书上抄下来的,我觉得回复表应该和主表是不同的表,而且也不应该用 title 来关联,应该有文章ID来关联,这个不重要,重要的是打开思路就对了。呵呵
4. 将数字编码成汉字
SELECT Name,
checked=
case checked
when 1 then ‘已审核’
when 0 then ‘未审核’
end
FROM Customer
5. 只复制表结构
Select * into tableB from tableA where 1<>1
或
Select top 0 * into tableB from tableA
6.复制表数据
select * into New_Customer from customer (插入一个新表)
或
insert into CFM(Type,Vacuum) Select Name,custid from Customer (插入一个已存在的表,这个用法很灵活)
7.将数据表中的数据呈几何级的增涨。
insert into CFM(Type,Vacuum) Select Type,Vacuum from CFM (一般没有什么用,用于程序员自娱自乐的测试)
最新评论