2021-03-01 2021-04-302020-12-272020-10-312021-01-012021-02-282020-11-20
我正在使用MySQL表。
样本表EMP
(primary_key
on(EID, DOJ)
):
你对索引的看法是对的。在这里没用。想到的唯一想法是生成一个列,告诉您日期是否是月末。因此,您将拥有一个可以索引并在查询中使用的列:
create table emp
(
ename varchar(100),
...
doj date,
is_month_end bool as (doj = last_day(doj))
);
create index idx_month_ends on emp (is_month_end);
delete from emp where not is_month_end;
演示:https://dbfiddle.uk/?rdbms=mysql_8.0&小提琴= 397388 b70bb1f459bbefce630ad27ac4
索引只有在表中数据的很小一部分(比如1%)的情况下才有帮助。由于要删除的行很多,因此读取整个表更有意义。
Where (month(doj) in (9,4,6,11) and day(doj) <> 30) or
(month(doj) in (1,3,5,7,8,10,12) and day(doj) <> 31) or
(month(doj) in (2) and day(doj) not in(28,29))
?你可以调整2位