请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

逻辑删除的null问题

老师, 因为业务上需要,所以要设计一个 datetime delete_time default null 字段放在每个数据表中,实现逻辑删除。删除时标记delete_time时间为当前时间。但是,这个字段加入后,因为很多null存在,各种查询的最后条件都是 and delete_time is null , 这样导致索引无效,产生很多全表扫描,影响查询效率。请问这个怎么解决。

正在回答 回答被采纳积分+3

1回答

sqlercn 2020-12-08 18:48:42

给delete_time一个默认时间比如1970-01-01

0 回复 有任何疑惑可以回复我~
  • 提问者 蓝色西西 #1
    老师,那这样会有很多1970-01-01这个值。这个字段的索引区分度不高,查询效率不高怎么办?
    回复 有任何疑惑可以回复我~ 2020-12-09 08:58:25
  • sqlercn 回复 提问者 蓝色西西 #2
    你查询的时候会经常查询时间为1970-01-01这样的日期的数据吗?如果不会的话那这个值对于索引的查询效率就不会有影响。
    回复 有任何疑惑可以回复我~ 2020-12-10 10:52:43
  • 提问者 蓝色西西 回复 sqlercn #3
    有时候分页要这样查询select * from table where delete_time="1970-01-01" limit 1000,100
    回复 有任何疑惑可以回复我~ 2020-12-10 17:22:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信