如何在MySQL中使用LAST_DAY()以便索引优势不会丢失?



我正在使用MySQL表。

样本表EMP(primary_keyon(EID, DOJ)):

司法部(YYYY-MM-DD)2021-03-012021-04-302020-12-272020-10-312021-01-012021-02-282020-11-20

你对索引的看法是对的。在这里没用。想到的唯一想法是生成一个列,告诉您日期是否是月末。因此,您将拥有一个可以索引并在查询中使用的列:

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位

相关内容

  • 没有找到相关文章

最新更新