1

我正在尝试确定 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;

我一直有这种查询。很多写入(插入/更新)和很少的读取

  1. 这会产生性能问题吗?
  2. 这会破坏我的索引并使它们无法使用吗?
  3. 我怎样才能摆脱这个问题?

另外,Oracle会更好还是Mysql可以处理这种数据?

4

1 回答 1

0

Oracle 的CREATE TABLE语句有一个选项可以在这种特定情况下提高操作效率。该选项是PCTFREE

与索引相比,由于行迁移,在频繁更新的表内部可能会出现碎片。

使用 Oracle,您可以使用适当的PCTFREE值来避免这种情况。相反,使用 InnoDB,您可以使用innodb_file_per_table参数并定期运行OPTIMIZE TABLE以重新组织数据,从而最大限度地减少副作用。

于 2013-10-13T09:39:24.127 回答