本文作者:kris

修改MySQL的数据库引擎为INNODB的方法-mysql如何修改引擎

kris 2025-01-31 10:57:55 2
修改MySQL的数据库引擎为INNODB的方法-mysql如何修改引擎摘要: mysql怎么启用innodb数据库引擎?1、停止 mysql服务2、编辑my.cnf文件,把skip-innodb注释3、在目录中把ibdata1、ib_logfile0、ib_...

mysql怎么启用innodb数据库引擎?

1、停止 mysql服务2、编辑my.cnf文件,把skip-innodb注释3、在目录中把ibdata1、ib_logfile0、ib_logfile1 这三个文件删掉4、启动mysql 服务

mysqlinnodbcount(distinct)很慢,怎么优化?

1. 把你的day字段类型改为long型,在页面显示的时候在格式化成自己需要的样式;

2. 在day字段上建立索引;

3. 把ip_4表类型有InnoDB改为MyISAM,如果不需要事物支持的话,建议不要使用InnoDB。

MySQL数据库设计之innodb如何设计主键索引?

MySQL数据库分为两种存储引擎MyISAM引擎与InnoDB。其中最主要区别在于InnoDB是聚集索引而MyISAM是非聚集索引。想要知道如何设计lnnoDB主键索引,我们则需要先理解其索引是如何实现才能进行合理有效的设计。

修改MySQL的数据库引擎为INNODB的方法-mysql如何修改引擎



InnoDB索引实现

InnoDB使用B+Tree作为索引结构,数据文件本身就是索引文件。在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。

修改MySQL的数据库引擎为INNODB的方法-mysql如何修改引擎

上图是InnoDB主索引(同时也是数据文件)的示意图,可以看到叶节点包含了完整的数据记录如子叶数据文件就可以理解为索引文件,15为key主键,这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

其次,InnoDB的辅助索引data域存储的是主键的值而不是地址。既InnoDB的所有辅助索引都引用主键作为data域。例如,下图子叶中辅助索引Alice的data存的是主键的值

修改MySQL的数据库引擎为INNODB的方法-mysql如何修改引擎

所以当使用辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。


设计的思路

在InnoDB的索引实现后我们就可以根据其特性作出相应的设计了,如

  • 不使用过长的字段作为主键,因为所有辅助索引都引用了主索引,过长的主索引会令辅助索引变得过大。
  • 不使用非唯一的字段作为主键在InnoDB,因为InnoDB数据文件本身是一颗B+Tree,非唯一主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,使用自增字段作为主键则是一个不错的方式。

以上就是如何设计InnoDB主键索引的方式,思路是设计先要去理解其原理,在理解其原理之后根据其特性结合实际场景业务等即可以做出对应合理设计,希望我的回答对你有所帮助。

mysql的innodb添加了事务为什么还会出现数据丢失问题?

会话的隔离级别设置为serializable的时候,其他会话对该表的写操作将被挂起;但是还是可以读取数据的,因此根据读取的数据做更新还可能会有问题。应用程序中为了防止核心数据被并发修改,一般在查询数据的语句中增加for update的选项,从数据库层面避免造成同一条数据被两个事务同时进行操作。

文章版权及转载声明

作者:kris本文地址:https://www.damoyx.com/p/29141.html发布于 2025-01-31 10:57:55
文章转载或复制请以超链接形式并注明出处大漠游侠网

阅读
分享