我正在尝试确定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-Tree索引添加某种哈希键,用于值’MyTestValue’.
现在,如果我运行以下语句,即使我没有更改列的值,是否会强制更新B-Tree索引?
UPDATE MyTable SET MyIndexedColumn = 'MyTestValue',MyNonIndexedColumn = 'A New Value' WHERE ID = 1;
MysqL足够聪明,可以确定吗?或者只是将该列作为更新语句的一部分,我告诉MysqL可能已经发生了变化,它应该做更新索引的工作吗?
最佳答案
如果你在MysqL客户端运行该查询,你会看到类似的东西
@H_403_41@Rows matches: 1,Rows Updated: 0
因此,MysqL肯定知道某行何时发生了变化 – 我从那里开始假设他们足够智能,不会从那里更新索引.