在基于外键检索多个记录时,有没有优化查询的方法?

vuktfyat  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(305)

我有以下疑问:

delete from tbl_table
where user = '123'

访问示例tbl\ U表:

id user phonenumber
1 123 (408)555-5555
2 123 (415)555-5555
3 123 (913)555-5555

当我运行一个delete时,它需要7000+毫秒,这似乎太多了。这是一张40万的记录表。
想知道如何构造数据库或查询以减少执行时间。

rjjhvcjd

rjjhvcjd1#

这有点复杂。删除的性能受许多因素的影响:
找到要删除的行需要多长时间?
删除了多少行?
表上构建的哪些索引也需要修改?
系统上还发生了什么?
表上定义了哪些删除触发器?
这使得这个问题很难回答。前两个问题可以解决。首先,索引有助于:

create index idx_tbl_table_user on tbl_table(user);

要使用此索引,请确保具有正确的类型。数字标识通常存储为数字而不是字符串,类型转换有时会妨碍索引的使用。所以如果 user 是一个数字,您要写:

where use = 123

删除“太多”行的第二个问题可以用更困难的方式来处理。可以使用要保留的数据创建临时表,截断原始表,然后重新插入值。唉,我怀疑你能在7秒内完成,所以这不是一个选择。
至于其他三个,您需要进一步调查您的系统和表,如果这些是延迟的原因。当然,如果系统负载是问题所在,那么在较安静的时间运行查询将加快查询速度。

tpgth1q7

tpgth1q72#

最好的办法是
在用户列上创建索引。
做你的手术
删除索引(如果是一次性操作)

CREATE INDEX idx_tbl_user ON tbl_table (user); 
DELETE FROM tbl_table WHERE user = '123'; 
DROP INDEX idx_tbl_user;

相关问题