我正在尝试确定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');
现在,如果我运行以下语句,它将更改已编入索引的列的值
UPDATE MyTable
SET MyIndexedColumn = 'MyNewIndexValue',
MyNonIndexedColumn = 'somenewvalu New Value'
WHERE ID = 1;
我总是有这样的查询。很多写(插入/更新)和很少的读取
另外,Oracle会更好还是Mysql可以处理这种数据?
答案 0 :(得分:0)
Oracle的CREATE TABLE
语句有一个选项,可以在这种特定情况下提高操作效率。该选项为PCTFREE。
由于row migration,因此在索引中,由于频繁更新,可能会在表内发生碎片。
使用Oracle,您可以使用正确的PCTFREE
值来避免这种情况。与InnoDB相比,您可以使用innodb_file_per_table参数最小化副作用,并定期运行OPTIMIZE TABLE
来重组数据。