MySQL索引沒更新是怎么回事呢?
在MySQL中,索引是一種常見而重要的優化手段,可以提高查詢效率,但如果遇到索引沒更新的情況,會影響查詢性能,甚至導致查詢結果不正確。那么,索引沒更新的原因是什么?
CREATE TABLE `students` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `age` int(11) NOT NULL, `score` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`), KEY `idx_age` (`age`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `students` (`name`, `age`, `score`) VALUES ('Lucy', 17, 90), ('Lucy', 18, 95), ('Lucy', 19, 88), ('Lucy', 20, 92), ('Jack', 18, 87), ('Jack', 19, 91), ('Tom', 20, 94), ('Tom', 21, 89);
假設有這樣一張名為students的表,其中包含了學生的姓名、年齡和成績三個字段,并且分別創建了主鍵和兩個索引。現在,我們想要更新某一個學生的成績信息:
UPDATE `students` SET `score` = 95 WHERE `name` = 'Lucy' AND `age` = 19;
此時,如果我們查看該表上該索引的統計信息,可能會發現索引的修改計數(modified)并未發生變化,而實際上索引已經發生了更新。這是為什么呢?
原因是,MySQL在更新數據時,不僅會更新相應的行記錄,同時也會更新相應的索引。但是,如果更新前后的索引值沒有發生變化,那么MySQL就不會修改對應索引的統計信息中的修改計數。
因此,當我們需要查看一個索引的修改情況時,不能直接通過統計信息中的修改計數來判斷,而要根據具體情況來分析。