_今天过表如上图:是否启用,是否需要确认,如图选框✅表示是启用没有选择表示未启用,灰色表示不可修改和普通颜色表示是可修改_
#观点一认为设计表时两个字段可以就可以: is_enabled,is_confirm,值如下 0:否 1:是 2:是且不可修改 3:否且系统不可修改
#观点二:需要四个字 is_enabled 值 0 未启用 1启用 is_enabled_write 启用字段是否可以修改 0 不可修改 1 可修改 is_confirm 值 0 不需确认 1需要确认 is_confirm_wirte 确认字段是否可以修改 0 不可修改 1可修改
上面两个观点讨论了好久,各位觉得哪种设计合理,帮忙提提意见
到底是2个字段还是4个字段,各有各的合理性
说2个字段简单,那只是数据库层面看起来少写2个字段
但是你要考虑到实际使用的时候是什么情况
很多地方读取权限,它只读取并不修改,它只想知道当前状态到底是启用还是不启用
那么1和3表示启用,2和0表示不启用,显然是为这些地方的使用增加难度
那么到底是去修改这个权限的页面多,还是使用这个权限的页面多,还是一样多
根据不同的业务,你要选择最合理的方法,而不能只局限于数据库里多和少
MySQL中提高性能
的一个最有效的方式是对数据表设计合理的索引
。索引提供了高效访问数据的方法,并且加快查询的速度,因此索引对查询的速度有着至关重要的影响。
快速地定位
表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。扫描表中的所有记录
。在数据量大的情况下,这样查询的速度会很慢。大多数情况下都(默认)采用B+树
来构建索引。只是空间列类型的索引使用R-树
,并且MEMORY
表还支持hash
索引。
其实,用不用索引,最终都是优化器说了算。优化器是基于什么的优化器?基于cost开销(CostBaseOptimizer)
,它不是基于规则(Rule-BasedOptimizer)
,也不是基于语义
。怎么样开销小就怎么来。另外,SQL语句是否使用索引,跟数据库版本、数据量、数据选择度都有关系。
针对问题中提到的两个设计观点,下面给出我对每个观点的想法和建议:
DECLARE cursor CURSOR FOR
SELECT * FROM orders_history WHERE type=8 ORDER BY id;
OPEN cursor;
DECLARE @offset INT = 0;
DECLARE @pageSize INT = 100;
FETCH ABSOLUTE @offset cursor;
WHILE @@FETCH_STATUS = 0 AND @offset < @pageSize
BEGIN
-- 处理当前记录
-- ...
SET @offset = @offset + 1;
FETCH NEXT FROM cursor;
END;
CLOSE cursor;
DEALLOCATE cursor;
综上所述,以上是我对问题的分析和解决方案建议。
这个要看你的业务逻辑了,是否允许修改,这个要看需求。
但是我个人倾向,(1)如无必要勿增实体(2)我会考虑用一个枚举值表示是否启用和是否确认,每个二进制位表示一个开关量
好处在于,让这个值原子化,级你不是4个布尔值的全部排列组合都是有效的状态吧,如果弄出多个字段,就可能造成状态的不统一。