gpt4 book ai didi

php - 删除-查询花费太多时间

转载 作者:行者123 更新时间:2023-11-29 17:56:31 25 4
gpt4 key购买 nike

我在 Galera 集群(3 个服务器)中有一个 MariaDB-tabel subject_message_new,用于注册用户已阅读消息。我们有 31000 用户和数百万条消息,因此表非常大(现在多达 150 万条记录)。如果更新消息,则必须删除所有带有 $id_message 的已读条目。

用户还可以将消息复制到另一个主题,以便消息 ($id_message) 引用原始消息 (id_message_org),也the-read-必须删除该连接的原始消息中的条目

这是我的 MySQL 表:

Kolom   Type    Commentaar
id bigint(20) Auto nummering
id_message int(11)
id_subject int(11) NULL
nr_user int(11)
datetime datetime

Indexen
PRIMARY id
INDEX nr_user
INDEX id_message
INDEX id_subject

Foreign keys
id_message subject_message(id_message) CASCADE CASCADE
nr_user users(nr_user) CASCADE CASCADE
id_subject subject(id_subject) CASCADE CASCADE

我有一个 PHP 函数,在消息更改后调用

function message_new($id_message,$id_subject){
global $conn;
mysqli_query($conn,"DELETE FROM subject_message_new WHERE (id_message='$id_message' AND id_subject='$id_subject') OR id_message IN(SELECT id_message FROM subject_message WHERE id_message_org='$id_message')");
}

如果我将子查询拆分为 2 x DELETE 查询,则需要 2 x 6-12 秒...

此函数(查询)在生产中花费的时间太长,长达 6-12 秒。有人可以给我建议如何调整吗?或者让它工作得更好?

最佳答案

问题在于删除方法中的子查询。将单个语句拆分为两个查询将明显提高性能。

从 subject_message_new 中删除,其中 id_message='$id_message' AND id_subject='$id_subject';

从 subject_message_new smn INNER JOIN subject_message sm 中删除 smn.id_message = sm.id_message_org;

NOTE: We should try to prefer JOIN over subqueries while performing Select, Update or Delete operations

然后在 subject_message_new 表的 id_message 和 id_subject 列中添加索引。并在 subject_message 中为 id_message_org 列添加索引。这绝对可以解决问题。

关于php - 删除-查询花费太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48762890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com