DLX Dev Everything Engineer

物理数据库设计反模式

2019-10-16

在知道了需要存储哪些数据之后,使用你所知的RDBMS技术特性尽可能高效地实现数据管理。这包含了定义表和索引,以及选择数据类型。你也要使用SQL的“数据定义语言”,比如CREATE TABLE语句。

反模式:使用浮点数。标准:浮点数二进制表达规范IEEE 754标准。浮点数丢失精度的情况:1/3这种无限循环小数,浮点数表示精度有限0.333,会造成1/3 + 1/3 + 1/3 = 1 而0.333 + 0.333 + 0.333 < 1。0.95这种正常小数用二进制表示精度就会丢失。

建议做法:尽可能不要使用浮点数。


反模式:使用ENUM或者check约束。

建议做法:代替可变的枚举:创建一张检查表,每一行包含一个允许在Bugs.status列中出现的候选值;然后定义一个外键约束,让Bugs.status引用这个新表。


反模式:业务上的图片文件等要不要和业务数据一起存放在数据库中。文件不支持delete,事务隔离,回滚操作,不支持备份。

建议做法:将图片存在一个BLOB类型的列中。

示例sql: UPDATE Screenshots
SET screenshot_image = LOAD_FILE(‘images/screenshot1234-1.jpg’)
WHERE bug_id = 1234 AND image_id = 1;


反模式:乱用索引
建议做法:你可以使用好记的MENTOR方法来分析数据库索引的使用:测量(Measure),解释(Explain),挑选(Nominate),测试(Test),优化(Optimize)和重建(Rebuild)。索引覆盖。

数据库服务允许你配置缓存所需要的系统内存大小。大多数数据库的默认配置都很小,从而能保证数据库在大部分操作系统上都正常工作。通常情况下我们需要调高这个缓存大小的设置。

重建索引,因为索引在平衡的时候性能是最高的。


下一篇 查询反模式

Comments

Content