Sql 删除单面对话

Sql 删除单面对话,sql,sqlite,sqlperformance,Sql,Sqlite,Sqlperformance,我正在创建一个移动应用程序,将数据存储到sqlite中,性能非常重要。 为了删除单面对话,我使用以下查询: delete from messages where id in ( select id from messages where sender_id not in( select recipient_id from messages ) union select id from messages where recipient_id not

我正在创建一个移动应用程序,将数据存储到sqlite中,性能非常重要。 为了删除单面对话,我使用以下查询:

delete from messages where id in (
    select id from messages where sender_id not in(
        select recipient_id from messages
    )
    union 
    select id from messages where recipient_id not in(
        select sender_id from messages
    )
 )
但我分析了一下,发现删除大约800条记录大约需要2秒钟。
因此,请帮助我更快地编写另一个查询。

不需要单独的ID查找步骤:

DELETE FROM messages
WHERE sender_id    NOT IN (SELECT recipient_id FROM messages)
   OR recipient_id NOT IN (SELECT sender_id    FROM messages)

此外,当您将索引添加到
发件人id
收件人id
列时,查找速度更快。

我是否理解正确:您希望所有未收到邮件的发件人发送的邮件以及所有未发送邮件的收件人发送的邮件?@vMai,是的,您是对的。