问题描述
我有一个PostgreSQL表,我想删除包含特定值的第一行。如果必须选择包含特定值的第一行,我将使用select x from table where x = 5 limit 1
并且查询将很快-无需扫描整个表,它将在找到第一个匹配值后停止。但是,如果我在子查询中使用delete
子句,它仍然会扫描整个表。
慢速查询示例:delete from table where x in (select x from table where x = 5 limit 1);
问题是找到第一个匹配值后如何使删除查询停止。在此表中,如果有帮助,我也有主键。
解决方法
您尝试这样做吗?
delete from table where id in (select id from table where x = 5 limit 1);
也许您的x列未建立索引
,首先,如果x是唯一的,则在SELECT查询中不需要limit 1
。
您尝试过吗?
delete from table where x = 5;
不需要子查询,在SELECT查询中使用的WHERE子句可以直接在DELETE查询中使用。
请注意,如果x不是唯一的,它将删除x = 5的所有行。