摘要: 目标:存储和使用空值反模式:将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) 编辑
摘要: 目标:限定列的有效值,即字典库反模式: 1、在列定义上指定可选值 create table Bugs(status varchar(20) check(status in('new','in progress','fixed')))。 2、使用触发器 还有使用域或者用户自定义类型(UDT)等方法。 缺点: 1、无法获取所有的值,无能用select distinct status from Bugs,因为可能有的status目前还没有存储。 维护不好的话,还有可能造成列表和数据库存储的值,不一致。 2、增加一个值,需要修改数据库定义或者触发器。 3 阅读全文
posted @ 2012-05-07 09:56 日暮乡关何处是 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 目标:使用小数取代整数反模式:使用float float类型是使用二进制格式编码实数数据。并不是所有的十进制数都能用二进制存储,所以浮点数通常是舍入到了一个非常接近的值。 比如: select rate from A where id=123 --Result:59.95 select * from A where rate=59.95 --Result:empty set;no rows match. select * from A where ABS(rate-59.95)<0.000001 --这个才能正确查出数据!识别反模式: 使用float、real。合理使用反模式: ... 阅读全文
posted @ 2012-05-07 09:12 日暮乡关何处是 阅读(338) 评论(0) 推荐(0) 编辑