如何解决为什么在soft_delete位置使查询速度降低5倍?
我有一个使用Laravels Soft Delete的users
表,该表实际上是可空的deleted_at
列。如果deleted_at
为null,则表示该用户未被删除。
我想计算在特定日期之后创建的130k用户表中未删除用户的数量。
使用
`select count(*) as aggregate from `users` where `created_at` >= '2019-09-18 10:33:09' and `users`.`deleted_at` is null`;
需要269毫秒。
使用
select count(*) as aggregate from `users` where date(`created_at`) >= '2019-09-18 10:33:09';
需要57毫秒。
我在https://stackoverflow.com/a/26530488/2311074处发现deleted_at
不应被索引,而实际上索引deleted_at
并没有改变任何东西。
另外,创建索引索引(created_at
,deleted_at
)也不会更改任何内容。
我能够提高查询的执行时间
select SUM(CASE WHEN (deleted_at is null) THEN 1 ELSE 0 END) as aggregate from `users` where date(`created_at`) >= '2019-09-18 10:33:09';
仅在78毫秒内执行,但我不明白是什么原因加上额外的where条件使查询慢5倍?
使用MysqL Explain并没有帮助我找出问题所在。这是78ms查询的结果
这就是269ms查询的结果
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。