索引对加快 UPDATE 的使用是否有意义?

sem*_*sel 2 php mysql indexing

我在 MySQL 中有一个 MyISAM 表,它包含三列 - 一个自动递增的 ID、一个整数(客户 ID)和一个小数(帐户余额)。

此时,每当我初始化系统时,我都会使用以下命令完全擦除表:

truncate table xyz;
alter table xyz auto_increment=1001;
Run Code Online (Sandbox Code Playgroud)

然后我用来自 PHP 的数据重新填充表。我通常最终在该表中有多达 10,000 个条目。

但是,由于对系统的新要求,我现在还需要能够在系统运行时更新表,所以我不能再擦除表而不得不使用UPDATE而不是INSERT一一更新余额,这将比我现在所做的一次插入 20 条新记录要慢得多。

PHP 仅将客户 ID 和金额发送到 MySQL - 其他 ID 并未实际使用。

所以我的问题是:考虑到来自 PHP 的输入很可能不正常,在客户 ID 上放置索引以加快更新是否有意义?或者添加索引会减慢它的速度以使其不值得吗?

我也不知道该索引是否完全用于UPDATE命令...

关于如何加快速度的任何其他建议?

Gor*_*off 5

这取决于您的更新查询是什么。大概是这样的:

update xyz
    set val = <something>
    where id = <something else>
Run Code Online (Sandbox Code Playgroud)

如果是这样,索引id肯定会有助于加快速度,因为您正在寻找一条记录。

如果您的查询如下所示:

update xyz
    set val = 1.001 * val;
Run Code Online (Sandbox Code Playgroud)

索引既无济于事,也无济于事。需要扫描整个表并且不涉及索引。

如果您的查询是这样的:

update xyz
    set id = id+1;
Run Code Online (Sandbox Code Playgroud)

那么索引会变慢。您必须读取和写入表的每一行,而且您还有维护索引的开销。