mysql
# mysql
## mysql数据结构

- 二叉树
- 红黑树(平衡二叉树)
- B树 (平衡二叉树基础上从每个节点一个元素变成多个元素)

- B+树

## mysql慢查询



## MyBatis缓存分类
MyBatis提供了一级缓存和二级缓存
一级缓存:也称为本地缓存,用于保存用户在一次会话过程中查询的结果,用户一次会话中只能使用一个sqlSession,一级缓存是自动开启的,不允许关闭。
二级缓存:也称为全局缓存,是mapper级别的缓存,是针对一个表的查结果的存储,可以共享给所有针对这张表的查询的用户。也就是说对于mapper级别的缓存不同的sqlsession是可以共享的。
## sql 优化
SQL语句优化
(1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。
(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。
(3)避免在索引列上使用计算
(4)避免在索引列上使用IS NULL和IS NOT NULL
(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
(8)把*改为前端所需要的字段名
(9)模糊查询比如‘%xxx%’,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%。
## 如何优化数据库,如何提高数据库的性能?
1、优化索引、sql语句、分析慢查询
2、设计表的时候严格根据数据的设计规范来设计数据库
3、使用缓存,经常访问到的数据而且不需要变化的数据放到缓存中
4、使用固态硬盘,加快磁盘IO操作
5、采用MYSQL内部自带的表分区技术,把数据分层到不同的文件中,能够提高磁盘的读写效率
6、垂直分表,不经常用到的数据放到一个表中,节约磁盘的I/O
7、主从分离读写,采取主从复制把数据库的读操作和写操作分离出来
8、数据库分库分表(数据量特变大的)
9、选择合适的表引擎,对参数地上的优化
10、进行架构级别的缓存,静态化和分布式。
11、采用全文索引