一.索引
1.什么是索引?
在数据之外,数据库还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用指向数据,这样就可以在这些数据结构上实现高效查找,这些数据结构就是索引。
简单来说索引的出现就是为了提高数据的查询效率,就像书的目录一样。在书籍中,用户不必翻阅完整个书就能根据目录迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
2.创建索引
2.1 alter table
alter table student add index index_name(sName);
alter table student add unique index_id(sid);
alter table student add primary key (sid);
index_name ,index_id是索引名,主键不用写索引名,写了也没有用.(也可以不写索引名,MySQL自动给你分配!)
2.2 create index
create index index_name on student1(name);
create unique index indexUnique_name on student1(name);
2.3创建索引的注意事项
数据库设计的时候,不要让字段的默认值为null.
2.4删除索引
drop index index_name on student;
alter table student1 drop primary key;
index_name是索引名 试图student是表!
2.5查看索引
show index from student1;
3.InnoDB的索引模型
在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。InnoDB默认使用b+tree作为索引结构.
索引类型分为主键索引和非主键索引,主键索引也被称为聚簇索引,其叶子节点存储的是一行数据.非主键可以参加二级索引,二级索引的叶子节点存储的是主键id.
3.1 主键索引和普通索引的区别?
回表:假如当我需要查询一个数据时,查找条件不是通过主键id查询的,这个时候就会在二级查询下面去查找,如果我查找的数据刚好可以在二级索引里面找到那么就称为覆盖索引(只经过一次b+tree查询),如果查找的数据在二级索引找不到,那么就获取二级索引叶子节点下面的id,然后拿到id去主键索引里面查找数据,这个过程就叫回表.
4.索引失效
- LIKE查询时已%开头;
- 如果列类型是字符串,那在查询条件中需要将数据用引号引用起来,否则不走索引;
- 索引列上参与计算会导致索引失效;
- 如果Mysql估计全表扫描要比使用索引要快,会不适用索引
- B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走;
二.读写分离
1.为什么需要读写分离
在业务系统中,当面临大量的读操作,且读操作对数据库的压力增大,造成写操作的效率降低时,就需要使用读写分离。
读写分离可以有效地分担数据库的压力,优化系统性能,提高数据处理效率。例如一般电商网站90%都是查询操作,这个时候配置一个主数据库进行写操作,配置多个从数据库进行读操作。这样,读操作就可以在多个从数据库上进行分担,不会影响到主数据库的写操作,从而提高了系统的处理效率。
2.如何保证数据的一致性
1.主从数据同步:主从数据库服务器之间的数据同步是实现读写分离的基础。确保主数据库服务器上的数据变更能够实时地同步到从数据库服务器上,以保证数据的一致性。
2.事务一致性:在实现读写分离时,需要保证事务的一致性。确保在同一个事务中的读写操作都在同一个数据库服务器上执行,以保证数据的一致性。
3.负载均衡:为了平衡主从数据库服务器的负载,可以根据请求的读写类型和流量进行动态分配,将读请求分散到多个从数据库服务器上,避免单点故障和性能瓶颈。
4.异常处理:在读写分离过程中,可能会遇到各种异常情况,如网络故障、数据库故障等。需要设计合理的异常处理机制,及时处理这些异常情况,并保证数据的一致性。
5.数据校验:在数据同步过程中,需要进行数据校验,确保主从数据库服务器上的数据一致性。可以通过比较主从数据库服务器上的数据差异来进行校验。
6.监控和日志记录:建立完善的监控和日志记录机制,可以及时发现和处理数据不一致的问题,并保证数据的一致性。