mysql

# mysql ## mysql数据结构 ![图片.png](https://cos.easydoc.net/31477061/files/kn0i3kk4.png) - 二叉树 - 红黑树(平衡二叉树) - B树 (平衡二叉树基础上从每个节点一个元素变成多个元素) ![图片.png](https://cos.easydoc.net/31477061/files/kn0nbqw9.png) - B+树 ![图片.png](https://cos.easydoc.net/31477061/files/kn0qdn4j.png) ## mysql慢查询 ![图片.png](https://cos.easydoc.net/31477061/files/kp568hes.png) ![图片.png](https://cos.easydoc.net/31477061/files/kp56a1fz.png) ![图片.png](https://cos.easydoc.net/31477061/files/kp56a88k.png) ## 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、采用全文索引