标签: myisam

什么时候表格从MyISAM改为InnoDb?

这个问题就像我之前的问题的延续: 我是否正确InnoDb比MyISAM更频繁的并发更新和插入?

但这次我有具体的问题.
我们知道,当我们没有很多并发更新(插入)时,MyISAM比InnoDb更快.当我们有许多并发更新时,MyISAM表被锁定,所有其他客户端应该等待.

1)但是什么时候从MyISAM改为InnoDb?每秒更新1次?每秒10次更新?每秒100次更新?
2)对于一个具体的例子,最好是在我的网站上的一个表格中更改为InnoDb,我通常每分钟有几个更新(来自不同的会话),但有时它可以每秒2-3次更新?

mysql database performance myisam innodb

6
推荐指数
1
解决办法
1182
查看次数

为什么使用InnoDB而不是MySIAM

可能重复:
我是否应该总是喜欢MySQL InnoDB而不是MyISAM?

在什么条件下应该使用InnoDB而不是MyISAM?我见过一些MySQL优化测试,其中MyISAM被证明更快.我的所有表都是MyISAM,为什么要切换到InnoDB?

mysql database myisam innodb

6
推荐指数
2
解决办法
3071
查看次数

GROUP BY查询优化

数据库是带有MyISAM引擎的MySQL.

表定义:

CREATE TABLE IF NOT EXISTS  matches  (
   id  int(11) NOT NULL AUTO_INCREMENT,
   game  int(11) NOT NULL,
   user  int(11) NOT NULL,
   opponent  int(11) NOT NULL,
   tournament  int(11) NOT NULL,
   score  int(11) NOT NULL,
   finish  tinyint(4) NOT NULL,
  PRIMARY KEY ( id ),
  KEY  game  ( game ),
  KEY  user  ( user ),
  KEY  i_gfu ( game , finish , user )
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3149047 ;
Run Code Online (Sandbox Code Playgroud)

我已设置索引,(game, finish, user)但此GROUP BY查询仍需要0.4 - 0.6秒才能运行:

SELECT user …
Run Code Online (Sandbox Code Playgroud)

mysql myisam group-by query-optimization

6
推荐指数
2
解决办法
7345
查看次数

从MyISAM迁移到InnoDB

我对这个主题进行了一些搜索并找到了一些结果.但是,我正在寻找是否有人知道或可能指向一些真实或有信誉的案例研究,详细说明从MyISAM迁移到InnoDB的好处(特别是性能).

很好,如果你能指出任何关于MySQL版本5.5及以上,其中InnoDb作为默认存储引擎.

mysql myisam innodb

6
推荐指数
2
解决办法
4393
查看次数

将InnoDB表转换为MyISAM最安全的方法是什么?

我的数据库目前正在使用InnoDB引擎.现在我想添加全文搜索功能,这就是我想将表格转换为MyISAM的原因.但这样做会破坏所有外键.如何安全地将我的表引擎更改为MyISAM?

将表格更改为MyISAM引擎后,如何使用SELECT ... JOIN?

ALTER TABLE jobs ENGINE = MyISAM;
Cannot delete or update a parent row: a foreign key constraint fails
Run Code Online (Sandbox Code Playgroud)

mysql myisam innodb

6
推荐指数
1
解决办法
1万
查看次数

Mysql:插入性能INNODB vs MYISAM

我插入一个简单的小表,有5个属性和1000行.

我观察发动机是INNODB时,每次插入需要0.03 - 0.05秒.我将引擎更改为MYISAM,然后插入更快.它需要0.001 - 0.003.

问题是什么.innodb_flush_log_trx_commit = 1默认情况下.我就是这样的设置.这是我的innodb设置.

innodb_log_buffer_size : 1MB
innodb_log_file_size   : 5MB
innodb_buffer_pool_size: 8MB
innodb_flush_log_trx_commit = 1
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚这有什么问题.提前致谢.问候,UDAY

mysql performance myisam innodb insert

6
推荐指数
1
解决办法
2708
查看次数

MySQL表被标记为崩溃

我是MySQL数据库的新手.我一再看到MySQL的一个错误,说该表被标记为崩溃,应该修复.但是,我可以使用命令myisamchk修复崩溃的表.顺便说一句,我在MySQL中使用MYISAM数据库引擎.

我只是想知道在什么情况下数据库表崩溃以及如何防止它再次发生?

我使用mysqltcl库(3.0)从Tcl(8.5)脚本连接到MySQL(5.0)数据库.

mysql myisam

6
推荐指数
1
解决办法
4058
查看次数

在线时向大型MySql表添加列

我需要在MySQL DB(MyISAM表)中的一个表中添加一个新列,该表包含超过2000万行.

添加列的过程必须在运行时,我的意思是应用程序仍将运行,并且在更改表时仍将插入和选择行.

  • 这将如何影响正在运行的应用程序?
  • 执行此更改需要多长时间?

如何安全地完成此过程并且不会损害正在运行的应用程序?

mysql myisam alter-table large-data

6
推荐指数
1
解决办法
8619
查看次数

mysql在MyISAM和InnoDB之间的索引使用差异

我有这些小桌子,item并且category:

CREATE TABLE `item` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(150) NOT NULL,
  `category_id` mediumint(8) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`),
  KEY `category_id` (`category_id`)
) CHARSET=utf8

CREATE TABLE `category` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(150) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

我插入了100个类别和1000个项目.

如果我运行这个:

EXPLAIN SELECT item.id,category.name AS category_name FROM item JOIN category ON item.category_id=category.id;
Run Code Online (Sandbox Code Playgroud)

然后,如果表的引擎是InnoDB我得到:

+----+-------------+----------+-------+---------------+-------------+---------+--------------------+------+-------------+
| id | select_type | table    | type …
Run Code Online (Sandbox Code Playgroud)

mysql indexing myisam innodb

6
推荐指数
1
解决办法
4064
查看次数

了解MyISAM记录结构

我试图了解MyISAM如何实际存储其记录以及在记录插入和记录删除后如何维护其结构.我看过以下链接:

我想确定我是否理解正确,如果不对,请纠正我.

固定大小的记录

MyISAM固定大小的记录

  • 删除标记确定是删除还是不删除记录.
  • 记录标题保存行的哪一列包含NULL值
  • 数据长度是固定的.

可变大小的记录

在此输入图像描述

  • 删除标记替换为BLOCK_DELETED块类型
  • 记录头保存数据长度和未使用数据的长度

在此输入图像描述

  • 单个记录可以分成由溢出指针连接的多个块.

删除

在此输入图像描述

  • 对于可变大小的记录,将块类型更改为BLOCK_DELETED
  • 通过使新删除的记录的先前指针指向上次删除的记录来维护所有已删除记录的双链表.然后,最后删除的记录的下一个指针指向新删除的记录.
  • 对于固定大小的记录,只需将删除标记更改为已删除.(不确定他们是否使用双链表来连接所有已删除的记录和固定大小的记录)

插入

  • 如果没有未使用的空间(已删除的记录),请将数据附加到文件的末尾
  • 如果有未使用的空间适合新插入的记录,请在此处写入新记录.
  • 如果有未使用的空间远远大于新插入的记录,则拆分为两个记录:新记录和已删除记录.
  • 如果有未使用的空间小于新插入的记录,则在那里写入数据,有溢出指针指向其他块的未经处理的数据.

更新

  • 如果用户使用更长的数据更新现有数据会怎样?MyISAM会将记录标记为已删除并找到适合新数据的位置,或者只是使用溢出指针指向不合适的数据?

再回顾一下这个问题

我想确定我是否理解正确,如果不对,请纠正我.

其他问题

  • 如果表已被删除并插入很多次,因为记录结构可能充满溢出指针和未使用的空间,它会非常低效吗?

mysql database architecture myisam

6
推荐指数
1
解决办法
1538
查看次数