1

我知道我应该使用engine=MEMORY在内存engine=INNODB中创建表并使表事务安全。但是,我怎样才能实现这两个目标?我试过engine=MEMORY, INNODB了,但我失败了。我的目的是快速访问表并允许多个线程更改表的内容。

4

3 回答 3

3

你没有在上面说明你的目标。我猜您正在寻找良好的性能,并且您似乎还希望该表具有事务性。您唯一的选择确实是 InnoDB。只要您已将 InnoDB 配置为使用足够的内存来保存整个表(使用innodb_buffer_pool_size),并且同一服务器上的其他 InnoDB 表没有过多的压力,数据将保留在内存中。如果您担心写入性能(并且再次禁止使用同一系统的其他用途),您可以通过设置innodb_flush_log_at_trx_commit = 0和禁用二进制日志记录来降低持久性以显着提高写入性能。

对临时表使用任何类型的触发器都将是一团糟,并且不会给您带来临时表事务性的任何好处。

于 2013-01-12T22:11:02.013 回答
0

据我所知,有两种方法

第一种方式

创建一个临时表(这些存储在内存中,差异很小,当会话注销时它们将被删除)

创建临时表样本(id int引擎=Innodb;

第二种方式

您必须创建两个表,一个带有内存引擎,另一个带有 innodb 或 bdb

首先将所有数据插入到您的innodb表中,然后触发将数据复制到内存表中

如果你想清空 innodb 表中的数据,你可以用相同的触发器来做

您也可以使用事件来实现这一点

于 2013-01-12T06:32:29.817 回答
0

您正在寻求一种使用 2 个(或更多)引擎创建表的方法,这是 mysql 无法实现的。

但是,我猜您想使用内存,因为您认为 innodb 的速度不足以满足您的需要。我认为 innodb 非常快,可能就足够了,但如果你真的需要它,我认为你应该尝试创建 2 个表:

表 1 内存 <-- 这里是您进行所有 SELECT 的地方

table2 innodb <-- 在这里您将进行 UPDATE、INSERT、DELETE 等操作并添加一个 TRIGGER,因此当更新这个时,table1 会得到相同的修改。

于 2013-01-12T06:19:54.003 回答