学号课程号成绩
001
101
80
002
102
90
表六
四、MySQL的主从复制
1. 概念
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。
2. 原理
从库生成两个线程,一个I/O线程,一个SQL线程。
I/O线程 去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 I/O线程传binlog。
SQL线程 会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。
3. 主从复制用途
① 读写分离,在开发工作中,有时候会遇见某个sql
语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
② 数据实时备份,当系统中某个节点发生故障时,可以方便的故障切换。
五、MySQL中的锁
1. 为什么要加锁
数据库的锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。在数据库中加锁是保证在高并发的情况下,访问数据库的时候,数据不会出现问题。
2. 锁的分类
按操作分:
① 读锁(共享锁):针对同一份数据,多个读取操作可以同时进行而不互相影响。
② 写锁(排它锁):当前写操作没有完成前,会阻断其他写锁和读锁。
按粒度分:
① 表锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
② 行锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
③ 页锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
六、如何做 MySQL的性能优化
① 当只需要一条数据的时候,使用 limit 1
② 尽量避免使用 select * ,在查询的时候列出需要查询的字段。
③ 使用 join 代替子查询。
④ 减少使用 or,使用 in 或者 union(union all) 代替。
⑤ 为搜索字段创建索引。但是不要过度索引,索引越多,占用空间越大,反而性能变慢。
⑥ 避免进行类型转换,不然会导致索引失效。
⑦ 对查询语句使用explain 。 使用explain ,可以帮助了解MySQL是如何处理sql语句的, 可以查看到sql的执行计划,这样就能更好的去了解的sql语句的不足,然后优化语句。
⑧ 垂直分割,将常用和有关系的字段放在相同的表中,把一张表的数据分成几张表 这样可以降低表的复杂度和字段的数目,从而达到优化的目的