请求优化下sql

qq635842671 2020-02-18 07:53:52
bz_post
id,uid,title
bz_post_content
id,content



delete from bz_post_content WHERE ID IN (

SELECT a.id from bz_post a
left join bz_post_content c on a.id = c.id
where
a.id <>
(
select min(b.id) from bz_post b
left join bz_post_content d on b.id = d.id
where a.uid = b.uid and a.title = b.title and c.content = d.content

)
);

我写的很麻烦 其实就是 删除同一个uid下相同的title和content 但是保留一条
目前这个sql慢出天际 不太懂sql
...全文
91 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
foucus、 2020-06-06
  • 打赏
  • 举报
回复
你的意思应该就是行去重吧,可以参考下: https://blog.csdn.net/weixin_39540651/article/details/106387049
简即美 2020-06-06
  • 打赏
  • 举报
回复
顺说一句,处理SQL时候最重要的保持面向集合的思想。不是一条条找出符合xx条件的那一行,而已一次性找出符合条件那个集合。如果是从程序要转DBA要花好久克服原有的固定思维方式。
简即美 2020-06-06
  • 打赏
  • 举报
回复
我理解你的第一条就是指id最小的

delete 
from
 bz_post_content t1
where exists(
select 1 from bz_post_content  t2 where t1.uid=t2.uid and t1.title=t2.title and t1.content=t2.content and t2.id<t1.id
)
kaoziji 2020-05-27
  • 打赏
  • 举报
回复
用 EXPLAIN 输出执行计划,看一下。

956

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧