如何提高insert插入性能:
1,合并插入:
一个insert插入多条数据。
2,开启事务进行插入,减少因为每次插入一条数据产生的消耗。
3,改变参数
索引创建原则
1,如果数据太少没必要创建索引,因为索引占空间,还要维护。
2,索引少建,够用就行。
3,频繁更新的字段不适合创建索引。
索引区别
普通索引和唯一索引的区别
普通索引的索引值允许重复
唯一索引的索引值不可以重复
主键索引和唯一索引
唯一索引是辅助索引
而去在INNODB中唯一索引的叶子节点数据域存储的是主键索引的索引值。
myisam和innodb的区别
对比项 | MyISAM | InnoDB |
存在的意义 | 为性能而生 ( 存储表的总行数; 辅助索引和主键索引独立; ) | 为事务而生 ( 不存储表的总行数; 辅助索引叶子节点数据域存储主键索引值; ) |
主键 | 支持,但是可以没有,具有单一性(只能一个主键字段) | 支持,而且一定有,具有单一性 |
外键 | 不支持 | 支持 |
事务 | 不支持(每一条SQL语句都会自动提交--原子性) | 支持(对事物的支持体现在:事物开启,不会自动提交) |
分区 | MYSQL8.0以上版本不支持创建 | 支持创建 |
行表锁 | 表锁,即使操作一条记录也会锁住整|行锁,操作时只锁某一行,不对其它个表,不适合高并发的操作。 | 行锁,操作时只锁某一行,不对其他行有影响,适合高并发操作 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
表空间 | 小 | 大 |
关注点 | 性能(查看,查询快速) | 事务 |
默认安装 | Y | Y |
事务的ACID是怎么保证的
原子性:由undo log日志来保证,这个日志文件中记录了回滚需要的日志信息,当事务失败或者回滚时就利用undo log中的信息回滚。
一致性:由其他三个特性保证,其他三个成功,一致性就成功。
隔离性:由,加锁,MVCC来保证。
持久性:由内存和redolog日志文件保证,Mysql修改数据时,在内存和redo log文件中记录这次操作,MYSQL系统关机或者死机(宕机)之后,就算数据没有保存成功,也可以从redo log日志文件恢复修改的数据。
什么是MVCC
多版本并发控制(multi-version concurrency control)
MVCC只在read commited和repeatable read两个隔离级别下工作,和其他两个隔离级别不兼容。
read uncommited 总是读取最新的数据行,而不是复合当前事务版本的事务行。
serializable则会对所有读取的行加锁,MVCC没意义。
MYSQL的主从同步
什么是主从同步
主:主数据库服务器(master)-------在这个数据库服务器上对数据进行一切操作,比如插入,更改,删除等。
从:从数据库服务器(slave)-------从服务器通过I/O线程获取主服务器的数据和更改。
同步:表示从服务器和主服务器保持数据的一致,主服务器进行更改,从服务器也要进行相应的更改。
主从同步的作用
进行数据的备份
防止因为宕机导致数据丢失而无法恢复
主从同步的原理
1,slave的启动和连接master
slave开启I/O线程,连接到master.
开启SQL线程,读取I/O线程中的数据并写入本地的relay log文件。
2,master更改数据并发送
当slave连接master之后,master为slave在master内部开启一个叫binlog dump的线程。
当主服务器中的数据发生变化时。master会把需要主从同步的信息(即需要slave进行更改的信息)写入一个叫binary-log的日志文件(简称:binlog),并通过binglog dump线程把binlog文件中的内容发生给slave的I/O线程。
(查看binlog dump的命令:show processlist;)
3,slave接收数据和更改
slave的SQL线程读取到I/O线程中的数据,并写入自己本地的relay log日志文件,
然后更具relay log中的信息对自己本地的数据进行修改。
(show processlist也可以用来在slave上查看I/O线程和SQL线程)
如何实现主从复制
MYSQL的锁
有哪些锁
各个锁的作用
如何设置锁
锁的问题