我正在尝试确定MySQL更新索引的情况.说我有下表:
CREATE TABLE MyTable (
ID INT NOT NULL AUTO_INCREMENT,
MyIndexedColumn VARCHAR NOT NULL,
MyNonIndexedColumn VARCHAR,
PRIMARY KEY (ID),
INDEX MyNewIndex(MyIndexedColumn)
)
Run Code Online (Sandbox Code Playgroud)
然后我运行以下SQL来插入一行:
INSERT INTO MyTable (MyIndexedColumn, MyNonIndexedColumn)
VALUES ('MyTestValue', 'MyTestValue');
Run Code Online (Sandbox Code Playgroud)
据我所知,这个查询会在MySQL中为B-Tree索引添加某种哈希键,用于值'MyTestValue'.
现在,如果我运行以下语句,即使我没有更改列的值,是否会强制更新B-Tree索引?
UPDATE MyTable SET MyIndexedColumn = 'MyTestValue',
MyNonIndexedColumn = 'A New Value' WHERE ID = 1;
Run Code Online (Sandbox Code Playgroud)
MySQL足够聪明,可以确定吗?或者只是将该列作为更新语句的一部分,我告诉MySQL可能已经发生了变化,它应该做更新索引的工作吗?
我有一个数据库,其中包含多个应用程序的Logentries.现在我写了一个bash-Script,它应该删除超出大小限制的最早的一天.我有一个循环,每天删除一天,直到实际大小小于限制.但是在删除语句之后,表的大小没有正确更新.
我使用了这个Sql语句
'SELECT round(((data_length + index_length)), 0) "Size in Bytes" FROM information_schema.TABLES WHERE table_schema = "Log" AND table_name = "Log";'
Run Code Online (Sandbox Code Playgroud)
确定实际的表大小.如何在删除命令后强制MySql立即重新调整此大小?