摘要: 念:“佛萨德”。看了几个帖子:http://www.cnblogs.com/Terrylee/archive/2006/03/17/352349.html 、http://www.cnblogs.com/webabcd/archive/2007/03/20/681793.html、http://www.cnblogs.com/kid-li/archive/2006/07/10/446904.html这外观模式好像也太简单了吧。猿A要在项目里加一个特价商品页面,新建一个aspx拖几个datalist然后开始cs里写GetDate(),但是这事要一会儿查数据库,一会儿查用户喜好,一会儿看产品列表, 阅读全文
posted @ 2012-12-31 11:37 日暮乡关何处是 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 目标:恢复或重置密码反模式:使用明文存储密码 1、存储密码 如果攻击者截取到你用来插入密码的sql语句,就可以获得密码 2、验证密码 与上面相同。 3、在email中发送密码 email可能会被黑客劫持、记录。解决方案: 先加密再存储 重置密码而不是恢复密码 阅读全文
posted @ 2012-05-08 10:54 日暮乡关何处是 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 目标:检查sql查询次数反模式:试图用一条sql解决复杂问题 结果是:性能很低,而且往往得到了一个笛卡尔积。解决方案:分而治之 用多个sql得到数据,再进行整合。或者union多个sql的结果。 阅读全文
posted @ 2012-05-08 10:38 日暮乡关何处是 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 目标:减少输入反模式:使用* 缺点1、传输的数据量大。解决方案:明确列出列名 这一章内容太简单了,好像没啥可说的。我想起用ibatis的时候遇到的一个问题:最初的sql都是自动生成的,比如根据id update某个表,输入参数是这个表对应的一个entity,包含了这个表几乎所有的字段。这样使用的时候往往是: 先new一个entity,id确定,然后只给其中几个字段赋值 调用这个update语句执行。这样没有赋值的字段就被对应的default(type)值覆盖了! 阅读全文
posted @ 2012-05-08 10:38 日暮乡关何处是 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 目标:模糊查询反模式: like 缺点:性能太差,无法使用索引,必须全表遍历。合理使用反模式: 数据量小、条件简单时可以用。解决方案: 使用特殊的搜索引擎而不是sql 1、数据库扩展,各大数据库都有对全文检索的解决方案,但是配置复杂。 2、使用第三方搜索引擎,比如lucene... 3、实现自己的搜索引擎: 使用反向索引,就是一个所有可能被搜索的单词列表。再将与单词批量的数据的id保存到一个交叉表里。 一旦有新的搜索单词,就使用like查询结果,并将结果保存到交叉表里,这样下次就不必like了。 一旦有新的文档入库,就需要用触发器(或者定时)去填充交叉表。 阅读全文
posted @ 2012-05-08 10:31 日暮乡关何处是 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 目标:随即排序反模式: 使用rand() 缺点是无法利用索引,而且是全表遍历,性能太差合理使用反模式: 数据量很小的时候可以用解决方案: 1、使用随机数 ceil(rand()*(select max(id) from T) as randId) 问题是,取出的id有可能是不存在的,因为id不是连续的 2、选择下一个最大值 为了避免id不存在,我们找上面那条id的后一条数据。方法是:用上面那条sql和主表再关联一次,然后找关联后的第一条 3、使用row_number这一章也很搞啊,作者咋想的?使用rand()根本无法随机排序。 select *,RAND()as... 阅读全文
posted @ 2012-05-08 09:45 日暮乡关何处是 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 目标:要查询得到每组的max(或者min等其他聚合函数)值,并且得到这个行的其他字段反模式:引用非分组列 如:select articleid,max(tagid),tagname from articleTag group by articleid这一章有点搞,因为这一章的目标用group去实现,根本就是个错误(mssql是这样),语法就不对!mssql里用row_number就行了,如果不用group就很麻烦了,比如有一个people表,里面有firstname、lastname、age几个字段,现在想得到每个firstname分组里年龄最大的人的lastname用row_num... 阅读全文
posted @ 2012-05-08 09:11 日暮乡关何处是 阅读(945) 评论(0) 推荐(0) 编辑
摘要: 目标:存储和使用空值反模式:将NULL作为普通的值,或者不适用null 将NULL作为普通的值: 1、在表达式中使用可空列,结果都是null。 2、搜索允许为空的列 只能使用is null、is not null,其它方法都没法搜出null值。 3、在查询参数中使用null,无法将null作为参数传入。 使用not null,用一个普通的值来代替null 无法使用一个不是null的值(比如-1、0、‘’)来表示空。 使用not null就意味着这个列的每个值都必须存在而且是有意义的。解决方案:将null视为特殊值 1、在标量表达式中使用null ... 阅读全文
posted @ 2012-05-07 11:34 日暮乡关何处是 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 目标:优化性能 改善性能的最好技术就是合理使用索引。反模式:乱用索引 1、不用索引或者用太少 2、用了太多索引,或者无效的索引 比如,给主键简历索引:主键本来就有索引,所以新建索引没有必要。 对长字符串建索引:这种索引会很大,而且也不大可能对其进行全匹配查找。 组合索引:避免冗余索引,使用时需要在查询条件、联合条件、排序规则上使用定义索引时的顺序。 3、执行一些让索引无能为力的查询 like、表达式,都可能使索引无效。合理使用反模式: 分离率是衡量数据库索引的一个指标。分离率越高索引效率就越高。解决方案:MENTOR你的索引 MENTOR(mentor:导师... 阅读全文
posted @ 2012-05-07 10:31 日暮乡关何处是 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 目标:存储图片或其他多媒体大文件反模式:图片存储在数据库外,数据库存储文件的路径和名称 1、delete数据时,文件不会随之删除 2、文件不支持事务隔离 3、文件不支持回滚操作 4、文件不支持数据库备份工具 5、文件不支持sql的访问权限设置 6、文件不是sql数据类型,所以没有有效性验证合理使用反模式: 图片存储在数据库外,好处是:数据较小、备份快。解决方案: 使用BLOB类型(sqlserver的image)个人意见:关于反模式的6个缺点,我觉得都不是什么大的问题,因为图片一般不必删除。 阅读全文
posted @ 2012-05-07 10:09 日暮乡关何处是 阅读(244) 评论(0) 推荐(0) 编辑