深度优化sql 查询, 提升性能一百倍是什么概念?
摘要: 正在做一个软件设计, 希望有个功能, 然而, 对于加上该功能后对系统性能造成的影响很是担忧. 可以说是, 一方面想要有这个功能, 另一方面又对性能问题是否能够解决很是怀疑, 正处于犹豫不决状态. 于是决定进行实验. 首先对表结构和索引进行了优化, 初步结果还不错, 性能基本进入可接受的范围. 然而, 这是目标面向一个百万千万用户的系统, 所以, 刚好处于边缘状态是远不够的. 于是, 就借助于Sql Server Management Studio 的execution plan 显示功能, 对查询进行了优化. 在接下来的一两个小时内, 写出了同一个查询功能的4个不同的版本, 居然把性能提高了一百多倍.如果单靠硬件来投资来提升性能,提升一百倍,需要增加的钱远远不止一百倍.这就是优化的功效!
阅读全文
posted @
2010-12-29 21:43 SuperSaiyan 阅读(322) |
评论 (2) 编辑
使用主密码对各种账户密码进行加密管理的文件加密工具
摘要: 两个基本的安全原理是,一个账户用一个密码, 密码强度要足够高。比如,你不应当在你的工商银行,交通银行帐户上使用相同的密码,更不应当把这个使用到你的电子邮件账户上。 密码强度要足够高, 比如混合大小写,密码长一点,加入非字母数字。 所以人人都会有很多账户/密码要记忆。这样,免不了要时不时的忘记密码,造成麻烦。使用这个工具,你只需要记忆一个主密码,然后,把其他密码都放在被安全加密的文件中,这就省去了记忆和忘记的麻烦。本工具的关键点之一是对用户输入的密码进行Rfc2898DeriveBytes hash, 以产生一个随机数作为真正的加密密码。在进行Rfc2898DeriveBytes hash时,可以选择hash的循环次数(在配置文件 .config中的 HashLoop),作者选了100000, 这个数目选的愈多,则hash所花的时间越长,所以,进行brutal force破译(猜密码)时,每个可能用户密码上所花的时间也就越长。对于一般的保密,选取1000是够用的。尽管,本人曾在某著名公司设计过一款安全
阅读全文
posted @
2010-12-29 21:17 SuperSaiyan 阅读(41) |
评论 (0) 编辑
多列复合索引的使用- 如何绕过微软sql server的一个缺陷
摘要: 多列复合索引,就是指由多个字段组成的索引。多列复合索引的使用是相当普遍的,并且,在查询中,用多列复合索引来指定搜索范围的边界也是相当常用的。然而,微软sql server 在处理这类索引时,却有个重要的缺陷。
举个例子来说明问题,假设某个表T有索引 ( cityid, sentdate, userid), 现在有个分页列表功能,要获得大于某个多列复合索引V0的若干个记录的查询,用最简单表意的方式写出来就是 V >= V0, 如果分解开来,就是
cityid > @cityid0 or (cityid = @cityid0 and (sentdate > @sentdate0 or (sentdate = @sentdate0 and userid >= @userid0))),
当你写出上述查询时,你会期待sql server会自动的把上述识别为V >= V0类型的边界条件,并使用index seek操作来实施该查询。然而,微软的sql server 并没有那么聪明(其他的sql server如何还不得知), 当它遇到这样sql时,sql server就会采用index sc
阅读全文
posted @
2010-12-14 18:44 SuperSaiyan 阅读(196) |
评论 (0) 编辑