mysql 聊天引擎 table(heap/memory vs innodb)

mysql engine for chat table (heap/memory vs innodb)

为聊天消息 创建半临时 table 时(即 table 中不会有任何超过 60 秒的消息,因为它们已被删除计划事件每分钟一次),使用 HEAP/Memory 而不是 InnoDB 是否有任何值得注意的性能提升?

试试这个:打开两个 windows 和 MySQL 个客户端会话。

在第一个会话中,使用 MEMORY 引擎创建一个测试 table 并给它几行。

mysql> use test;
mysql> create table chat ( 
  id serial primary key, 
  msg text, 
  likes int default 0, 
  created_at datetime default current_timestamp
) ENGINE=MEMORY;
mysql>  insert into chat set msg = 'sup';
mysql>  insert into chat set msg = 'sup';
mysql>  insert into chat set msg = 'sup';

在第二个 window 中,尝试更新一行。我使用 sleep 来模拟花费一些时间的另一个表达式。

mysql> use test;
mysql> update chat set likes = likes + sleep(60) where id = 1;

再次在第一个 window 中,而第二个 window 仍在休眠,尝试读取数据:

mysql> select * from chat;

注意它挂起!

内存table仅支持table级锁定。您的选择、插入、更新和定期删除都会相互排队,即使它们在不同的行上工作。

这可能会让您看起来表现不佳,因为对 table 的所有查询都必须连续执行。你没有并发。

表没有性能;查询具有性能。您没有在问题中描述任何查询。您必须考虑要运行 对数据进行哪些查询,以及查询率和并发性等,以评估哪种存储引擎最适合您的应用程序。