我正在尝试确定 MySQL 在什么情况下更新索引。假设我有下表:
CREATE TABLE MyTable (
ID INT NOT NULL AUTO_INCREMENT,
MyIndexedColumn VARCHAR NOT NULL,
MyNonIndexedColumn VARCHAR,
PRIMARY KEY (ID),
INDEX MyNewIndex(MyIndexedColumn)
)
然后我运行以下 SQL 来插入一行:
INSERT INTO MyTable (MyIndexedColumn, MyNonIndexedColumn)
VALUES ('MyTestValue', 'MyTestValue');
据我了解,此查询会将某种哈希键添加到 MySQL 中的 B 树索引中,以获取值“MyTestValue”。
现在,如果我运行以下语句,即使我没有更改列的值,是否会强制更新 B 树索引?
UPDATE MyTable SET MyIndexedColumn = 'MyTestValue',
MyNonIndexedColumn = 'A New Value' WHERE ID = 1;
MySQL 是否足够聪明来确定这一点?或者通过将该列作为更新语句的一部分,我是否告诉 MySQL 可能发生了某些变化,并且它应该执行更新索引的工作?
MySQL 不仅足够聪明,可以在值未更改时不更新索引,还可以足够聪明,不会用相同的值重写列值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)