存档

2006年6月 的存档

[转]SQL Server一些常见性能问题的总结

2006年6月29日 没有评论

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0

3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20

5.in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3

6.下面的查询也将导致全表扫描:
select id from t where name like ‘%abc%’
若要提高效率,可以考虑全文检索。

7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num

8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2

9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)=’abc’–name以abc开头的id
select id from t where datediff(day,createdate,’2005-11-30′)=0–‘2005-11-30’生成的id
应改为:
select id from t where name like ‘abc%’
select id from t where createdate>=’2005-11-30′ and createdate<‘2005-12-1’

10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

12.不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(…)

13.很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)

14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

15.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

16.应尽可能的避免更新 clustered 索引数据列,因为 clustered 索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建为 clustered 索引。

17.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

18.尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

19.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

20.尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

21.避免频繁创建和删除临时表,以减少系统表资源的消耗。

22.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。

23.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

24.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。

25.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

26.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。

27.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。

28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。

29.尽量避免大事务操作,提高系统并发能力。

30.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

具体的SQL语句在很多情况下需要结合实际的应用情况来写,这里不作叙述。

分类: 未分类 标签:

Google拟清仓抛售百度股份

2006年6月23日 没有评论

新浪原文:http://tech.sina.com.cn/i/2006-06-23/07161004381.shtml

结合此前的Google把cn的服务器迁移到北京,以及这条抛售股票的消息,我们能不能讲其代表的信息是Google准备在中国大干一场,开始全面的与baidu竞争了呢?

拭目以待,竞争为用户带来的好处。

分类: 未分类 标签:

评“专家称银行卡跨行查询收费价格偏低”

2006年6月22日 没有评论

原文:专家称银行卡跨行查询收费价格偏低

文章解释了银行收取跨行查询收费的原因,以及每次查询0.3元这个价格的由来,等等。

当中提到原因之一就是“搭车行为”。“搭车行为”指某些银行鼓励用户使用其他行的自动取款机,而自己不准备大量的自动取款机。由于现在自动取款机只有在跨行取款的时候收费,所以大量的查询变成了为某些发卡行免费服务了。当初跨行取款收手续费的时候,一些银行就承诺为其用户提供这个费用,现在跨行查询也收费了,不知道这些银行还有没有这样的承诺了。

我个人觉得这个费用相当不合理。当初在银联创建的时候,可能考虑到这些跨行会产生的费用,但是没有考虑到会有如此大的费用。于是自动取款机最多的几家大的国有银行开始联手银联对跨行取款以及跨行查询收费了。收费没有问题,但是这个费用应该转嫁到银行卡用户的头上吗?不应该,这个费用应该在银行之间进行结算,而不是直接在用户查询以后在用户的户头扣除。这样做的后果直接就是,全行业发卡量萎缩,加剧银行卡的竞争。而各大国有银行敢于这样做,还是因为其大量的自动取款机分布,在因为跨行取款、查询收费的竞争中占有优势的地位,但是这样做难免有垄断资源从银行卡用户头上搜刮利润之嫌疑。

跨行服务的情形,让人不免联想电信业的互联互通。虽说银行也的竞争似乎也如同电信业的竞争一样激烈,但是电信业却没有直接这样直接从羊身上取毛。我们还没有遇见过从网通打电话给铁桶,还要加收跨网费用的情况,在早期的短信收费中,也有过跨网短信费率与同网短信费用有所区别的情况,但是从这几年的趋势看,其费用还是逐步趋同的。

我们这个时候可以看到两个趋势:一个趋势,银行业整体短视,恶性竞争继续加剧,银行小客户的利益受伤害,同时大银行的形象、信誉受到影响。一个趋势,银行业向通信业学习,逐步降低这个费用。

说实话,这么看通信业还是比银行更可亲一些…

分类: 未分类 标签:

抢注live.com的新后缀MSN邮件已经被禁了

2006年6月17日 没有评论

估计已经被抢的差不多了,我抢了3个live.cn的,分别是zc、fatiao、webexpress三个。看见豆腐抢了一个doufu的live.com的,不知道他有没有抢上cn的。我还没想好启用哪个新的做为Messenger的帐号,也许就是单纯当一个邮件呢……谁有live mail的邀请,就给我发一个吧…

中国人民的就是力量大,发动群众抢注live的新后缀服务,能抢先这么多天找到注册的后门,还发动了足够多的人民群众把人家的后门给用爆了。嗯,以后还得这么用…用mvm的话就是,这是一种资源,一定要先占上再说。

分类: 未分类 标签:

WWF的网站使用了新的.NET Framework 3.0的域名

2006年6月16日 没有评论

我们知道,WinFX被重新名为.NET Framework 3.0。可见WinFX对于.NET Framework的重要性,虽然我认为3.0和2.0之间的间隔似乎太短了,但是WinFX作为.NET Framework 3.0来讲,当之无愧!

为此,WinFX有了自己的网站:http://www.netfx3.com 。同时,WWF的网站也变为了:http://wwf.netfx3.com 。在这个网站里面,除了我们熟悉的WWF、WCF、WPF以外,还多出来了一个Windows CardSpace(WCS),这是一个什么呢?

鉴于WinFX重新命名为.NET Framework 3.0,以及原来WinFX以及其部件WWF、WCF、WPF有着众多的针对VS2005的扩展,根据.NET Framework 1.0 到 .NET Framework 1.1的升级伴随着VS.NET2002到VS.NET2003的升级,我估计在.NET Framework 3.0的正推出,VS2005会有一个新的本版或者一个大扩展包或者一个ServicePack的产生。随着各种各样的VS2005的扩展插件的产生,VS2005越来越像是一个半成品。

让我们静静期待下一个完美的VS的到来吧!

分类: ASP.NET, WWF 标签: ,

如何申请@live.com和@windowslive.com

2006年6月16日 没有评论

下面内容转自newsmth的社会软件版:

我把我发现的步骤写一下,共大家参考
1、用一个MSN或hotmail账号登录login.live.com,不能用后缀为@msn.com和@hotmail.com的账号登录。
必须是 非微软提供邮件服务的id账号登录才行(不但 .it .jp .fr,甚至 domains的邮件等等 都不可以)
大家可以先用其他账号的邮箱地址注册一个live账号,然后接着下面的步骤操作
2、在地址栏输入https://account.live.com/LoginChangeName.aspx,输入密码即可修改
   成live.com windowslive.com和live.cn的账号。具体分配哪个域名视原来的id国籍而定
如果你原来注册的msn或hotmail是美国的,及改变成后缀为live.com的账号
如果是中国的就是live.cn
3 强调一点 如上操作,原来的id就自动转换成新的id了,也就是说原来的id废掉了。请大家谨慎操作

 

注:上面这两个链接已经都失效了。2010-8-22。

分类: 未分类 标签:

社会型网络你相信他吗?

2006年6月13日 没有评论

信任是需要培养的,你信任一个人,是需要很多交往才能建立,你信任一个商家,是需要很多次交易才能建立。虽然信任很不容易建立,但是信任却很容易破坏,一次不负责任的交往或者一次没有信用的交易,都能破坏已建立的信任。此外我觉得信任是不能传递的,或者是有条件的。你对一个人的信任必须到了极致,你才能信任他信任的其他人。但是不信任是可以传递的,你对于某一件事情没有信任了,对于类似的事情的信任都会降低相当的多。

说完信任,下面就是社会网络。也就是那些邀请制的社区,此外人与人的邀请关系是公开的,这样人与人的邀请关系可以织成一个网。所有的社会网络都标榜着这种社区可以拓展人们的交际范围,成倍的认识圈子内的人,还可以尽可能多的拿到某个人的联系方式。

但是我对此持怀疑态度:你相信社会网络吗?

首先就是信任的问题。这样的社会网络是要建立在足够的信任基础上的。你的交往范围是你的个人隐私,同时你的联系方式更是你的个人隐私。但是社会网络却要把这些都拿出来分享,用以织成关系网。这显然需要对社会网络以及里面参与的人足够信任才好。这里面包含两层信任,一个是对社会网络的服务提供商的信任,一个是对社会网络内的其他人的信任。

其他的就都是信任的衍生效应了。

你对周围的人不足够信任,那你能对你认识的某个人的某个朋友信任吗?很好,这样的话,所谓的社会网络,得到的就不是网状的社会关系,而是结成树状的星型结构。这显然和社会网络的一厢情愿不太一样。

你对社会网络的服务上信任吗?一般使用MSN的有过这样的经历,就是某个朋友向你的MSN或者Hotmail发送某个社会网络的邀请,显然是对MSN里面所有的人发出了邀请。但是这个肯定不是你这个朋友自己发送的,而是那个社会网络发送的。那么那个社会网路就拿到了你所有的联系人。可是社会网络能保证不利用这些信息作恶吗?我想每个社会网络都拍胸脯,但是事实呢?

估计最近不少朋友都被某个社会网络以不同的MSN帐号加过,然后做一句广告就走人。很多人认为微软泄露了我们的MSN地址,微软的MSN不应该开放API,但是实际上呢?你的信任的人把你的MSN泄露给了本不该信任的社会网络。

适用我前面的理论:不信任是可以传递的。那么我对于所有的社会网络都失去信任了……而且我一开始就不是很信任,现在更不信任了……

分类: 未分类 标签:

院士应该是学术领袖,而不是利益代言人

2006年6月12日 没有评论

在水母看到一篇文章:《七年投资换回"空心"产业 国产Linux前景堪忧》。仔细在网上搜了一下倪光南先生的简历,倪先生是中国工程院的院士,中科院计算所的博士生导师,近年来致力于Linux的推广工作。

凭借倪先生在中文信息化方面所作的工作,成为中国工程院院士是实至名归的,但是现在致力于Linux的推广工作做得事情有些令人不解。作为学界一领袖人物,引领技术方向。但从其在新闻媒体看到的言论,无一不是为某种利益的代言。

分类: 未分类 标签:

小心黑客攻击

2006年6月11日 没有评论

上次说到的easyjf的站长在自己的blog里面说:为了庆祝世界杯,把本来不开源的网站代码都公开了。虽然这个包不是最新的代码,使上个月打包的,但是根据日志显示,最近对代码的主要修改在功能的增加上面,那么可以这样理解,安全防护方面的改进并不多。

这一事件是很敏感的,为什么这样说呢?一个没有开源的产品,现在开源,如果没有详细的测试,一定时间的各方面考验,那么这样的开源是对自己的不负责任。我们可以有几个联想:第一个,Win2000的代码泄露,没超过一个星期的时间出现了一个新病毒、新蠕虫的高潮,只因新产品中保留的大约60%的代码被人看到,漏出了新的漏洞;第二个,动网论坛,如果你的网站安装了动网论坛,不管什么版本,你必须跟着动网的新版本进行升级,因为动网有开源版本,我就曾有这样的经历,偷懒装上去一个就不在更新了,结果在一个安全顾问的招聘启事诱发下,网站首页给改掉了。

我在这里为easyjf提醒,前一段80前与80后的论战引起了不小的波澜,这么短的时间内开放网站的源码,很不明智。

分类: 未分类 标签:

CPU的负载与对其他电子设备的干扰

2006年6月10日 没有评论

昨天买了一个全波段的数码显示收音机,两节充电野马2200mah电池。收音机26元,电池30元。收音机还不如电池值钱。

收听中波的时候,发现在一米以内,笔记本对于收音机的干扰还是很大的。开始的时候发现如果敲击键盘的话,收音机就会有啸叫。我还在纳闷为什么敲击键盘就会对收音机的中波有干扰的时候,发现不只是敲击键盘才有干扰,而是CPU的负载高就会有干扰。看来CPU高负载的情况下,消耗的电能不都是做计算和转化为热能了,还有不少的能量变成电磁波发射到了空间当中。估计台式机不会有那么大的干扰,毕竟外面有一个作屏蔽的铁盒子。

剩下的联想就是这些发射出来的频率会不会对人的身体有害呢?记得有人说笔记本电脑长时间放在腿上,会将温度传递到下身,杀精,影响生育。现在看来不只热量,还有辐射……那些可怜的小生命,真的很脆弱。以后加油站应该也写上一条,停车的时候除了不要打开手机,也不能玩游戏了…

在剩下来的担心就是安全上面的,我想足够精尖的技术可以远程感知CPU里面的计算都是什么,搞一个模拟环境就能把所有的东西泄露出来……

一个CPU对于收音机的干扰,居然引发我如此多的联想,看来我的脑子还没有锈住!

分类: 未分类 标签:

计数器和访问分析

2006年6月8日 没有评论

一个月之前看见贾四的Blog上面有计数器,问他访问量有多少,他告诉我已经有一千了。我说我也放一个。其实心里在打鼓,一直标榜访问量比他大,真要是访问量太低,有些丢人。不过现在可以交答卷了,我一个月的计数器计数达到了2258,算是一个出人意料的成绩。在此纪念一下。

说起计数器就不能不说访问统计,有了统计自然要对统计结果进行分析。自从申请了Google的分析服务以后一直就等着盼着,终于两天前拿到了,然后第一时间就放了上来。经过两天的使用,有了些心得。

计数器出现的最早,早期的静态网站时期就开始大行其道,但是人们开始发现其功能的不足,也就是其只能计算request的次数,这并不是真实的访问人数。于是带有识别访问人数的计数器诞生了,后来又有一些计数器开始屏蔽搜索引擎的bot爬网带来的request数量。

随后由于人们有了跟踪浏览者对于网站的访问行为分析的需求,站点访问统计分析的软件系统逐渐出来了。开始的统计分析系统比较简陋,只能统计出客户端的浏览器版本,操作系统版本,浏览器语言,ip位置等等。后来又有人加入了js来嗅探浏览器的其他性质,比如屏幕分辨率、颜色深度、支持java与否等等功能。在后来又开始对于request的引用地址统计。现在一般的统计分析还带了对于搜索引擎引用的关键词统计分析。总之相比以前的计数器是有突飞猛进的发展。

Goolge的分析服务是一个相当不错的分析手段,但是Goolge的分析服务并不适合所有的人。更适合什么人呢?适合投放广告和经营网站的人。他的侧重点也在这上面,据一个例子:Google分析服务提供了搜索引擎应用的统计,以及各大搜索引擎占的比例;但是如果你想知道都有哪些关键词霸浏览者从搜索引擎带到了你的网站,或者说搜索引擎用户我你的网站的什么内容最感兴趣,却没有进行分析。但是这并不影响Google的分析服务是目前市面上最出色的分析服务之一。

偶自己也有做分析服务的想法,现在在酝酿中…

分类: 未分类 标签:

Google还是一个单纯的搜索引擎吗?

2006年6月6日 没有评论

我们除了在使用Google的搜索引擎之外,还在用他的Gmail,Gtalk,他的Analytics服务。这里面有些服务赢得了很多的人的赞扬,在中国赢得了大量的用户群,而其关键是所有的服务还是免费的。已经有若干人已经以此进行自己的工作。但是现在不复存在了。

由于某些原因,我们现在能用的只有Google的搜索引擎了…那么我们要开始重新向所有的联系人通知自己的新电子邮件,对方也用Gmail的话那就只剩下电话了,Gtalk的话,可以改用MSN,Analytics服务只能自己去找其他的商业服务了…

同样Google的主页也受这个影响从这几天,我的Blog虽然不断访问量提升,但是来自Google的引用却几乎没有了。所有的搜索引擎的引用几乎都来自baidu。我想baidu是最大的受益者了…

当然由于同样原因受到影响不只有Google,MS的Live也受到了影响。互联网是工具,必然具有双面性,但是电子长城不能重演清朝时期的闭关锁国。只看到其有害的一方面,而将有益的部分也舍弃,就未免矫枉过正了…

分类: 未分类 标签:

现在的排名是365…

2006年6月6日 没有评论

昨天的排名是414,当然前面还有加上287万。但是总的来说前进了49名,有进步但还是需要继续努力…

另外申请地Google Analytics也到手了,开始跟踪了。网站的服务商也开始为我提供我每天的IIS日志了,找了一个逆火来分析。但终极目标还是自己做一个……

分类: 未分类 标签:

无意加入骂街的行为

2006年6月6日 没有评论

在CSDN的Blog的首页看到:国产开源环境的是非,《80前》一文引起的争论

无意加入骂街的行为,网络的虚假使人无所顾忌,所有的道德都不需要了。但是80后的后生们忘记了一个问题,他们站在明处与一个看不见的人对骂,直接后果就是别人对他们的形象一落千丈。他们的easyjf怎么样不知道,但是人的素质真是相当的一般…

easyjf的网站看了一下,没有什么实际的内容,也看不出easyjf有什么独特的地方。网站里面没有成员列表,大概都在QQ的群里面潜水,但是网站有一张组织机构图。很熟悉,嗯,就像学校时候的学生会组织机构图,连外联部门都有,看来宣传工作相当重要。

我觉得没有特色没有创新的作品要以一种平常心来对待,这就是一个习作。当做一项创举,就有攒鸡毛凑掸子的嫌疑了。可能还不是一般的鸡毛,都是珍贵的从孔雀身上拔下来的皮毛,但最终做出来的还是掸子。

说道国产开源的环境,我不多说。参照我以前对“麒麟事件”的看法,不占用国家的创新资源,不对这个行业造成不良影响,就挣一眼闭一眼。

这样的日志比较难分类,作为“胡说八道”也好,作为“立此存照”也好。但是想来还是“立此存照”的好,一则不想过早下结论,想看看一年以后这样的一个团队是不是还会存在,掸子一年之后究竟能不能凑成一个像样的掸子;二则有想到最后再看看谁还在笑的小心眼。

本着不浪费CSDN的免费资源的目的,我只把技术文章贴在CSDN的Blog上面。这篇文章就在此“立此存照”了。

分类: 未分类 标签:

cookies的编码与防火墙

2006年6月6日 没有评论

这个两者似乎并没有关系,但是事实上确实有联系还有很大的关联。下面描述的事情是发生在我身上的:

我的Blog和我在CSDN的Blog都是基于ASP.NET技术的Blog,我的是DasBlog,CSDN是.Text。他们的共同点就是都是使用UTF-8编码,这样Cookies也都以某种编码来存储。具体是什么编码,有待查阅一下RFC文档来考证一下。我们在回复某篇Post的时候,会有一个选项问你“是否保存回复信息”也就是你的nick和mail、site之类的信息,如果你选择了保存,则会在cookies里面做相应的记录。

带来麻烦的就是这个cookies。在我们的浏览器每次连接http服务器的时候,如果浏览器没有屏蔽cookies的话,你的在这个网站的cookies会自动地发送到服务器端,这样你保存在cookies里面的nick、email和site信息就会被自动填充的回复的那几字段当中。而http的连接是要通过防火墙的,加入你的防火墙不能识别你的cookies的编码的话,他将对你的http数据包内的数据误判。而且我们每个网页的会又多个request来完成,这样每个页面显示完全的话就需要多个连接或者并发多个连接。而防火墙在多次误判http数据包内的数据以后,就会判定这是一次攻击,而不是网络传输的错误。这样你的IP立刻就会被封掉。我的服务商给我的防火墙封ip的理由是 Http_cookies overflow攻击,引证我的判断。

我会把我的这个发现提供给服务商,请他们来调整防火墙。他们的防火墙使用的是BlackICE。很早就用过这个防火墙软件,当时就觉得这个防火墙很牛,可以做到很安全,但是作为服务商来使用的话,似乎防火墙规则太苛刻了。

分类: Web 标签:

两篇OSS2007的文摘

2006年6月2日 没有评论

SharePoint Object Model Maps

Creating a custom Site Definition in MOSS 2007

人们对MOSS2007的掌握速度出乎预料阿

分类: SharePoint 标签: