dotnetcore / osharp

OSharp是一个基于.Net6.0的快速开发框架,框架对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、Mvc(WebApi)、身份认证、功能权限、数据权限等模块进行更高一级的自动化封装,并规范了一套业务实现的代码结构与操作流程,使 .Net 框架更易于应用到实际项目开发中。
Apache License 2.0
2.77k stars 749 forks source link

专门添加一个IsDeleted(bool类型)字段, DeleteTime字段只用来记录删除时间 #158

Open wdydxf opened 4 years ago

wdydxf commented 4 years ago

您的功能请求与现有问题有关吗?请描述

where DeleteTime is null的效率有点差, 测试了300万条数据, 关联三个表时, 非常耗时. 查阅了相关资料, 资料说尽量不用IsNull做判断.

描述您想要的解决方案

专门添加一个IsDeleted(bool类型)字段, DeleteTime字段只用来记录删除时间

描述你考虑过的替代方案

现在的方式也可以使用

附加上下文,比如截图

gmf520 commented 4 years ago
  1. 逻辑删除涉及到唯一索引的问题,只用一个bool字段是实现不了唯一索引,因而用DateTime类型,即能表示已删除,同时也解决已删除数据的唯一索引问题
  2. 判断一个字段是否为null不应该成为性能的瓶颈吧
xuejmnet commented 2 years ago

确实mysql尽可能使用非null或许使用最小时间做为删除字段判断会比isnull高效譬如>1970/01/01之类的