【数据库】【研讨】【讲稿】数据库感兴趣地方
什么是数据库&&为什么要有数据库
数据库,用来存储数据。
同样是存储数据,之前接触的,就像是Excel,它适合存放一些简单的文字信息(一个人的身份证号码,电话号码,姓名)
为什么要有数据库?
文件VS数据库
文件相当于把数据存放在Excel当中,形成读写文件后进行存储,然后通过python等工具对文件数据进行筛选、处理、提取;
数据库则是把数据按照其结构将其储存在计算机中,形成一个具有大数据量的数据集合,相当于存放文件的文件柜。
数据库一些相关技术知识
(DBA数据库管理员;数据库工程师)
基础理论知识,包括硬件、操作系统、网络、存储等;
数据库基础知识,包括交互语言(例如SQL)、模式、范式、事务、锁等;
数据库运维技能,包括部署、备份、高可用、监控、迁移、排障、巡检等;
数据库性能调优技能,这是一项很重要的技能,包括慢查询分析、索引优化、参数调优等。
数据库调优
首先,华为和阿里数据库官方文档
-
SQL以及索引的优化是最重要的。首先要根据需求写出结构良好的SQL,然后根据SQL在表中建立有效的索引。但是如果索引太多,不但会影响写入的效率,对查询也有一定的影响。
-
要根据一些范式来进行表结构的设计。设计表结构时,就需要考虑如何设计才能够更有效的查询。
-
系统配置的优化。MySQL数据库是基于文件的,如果打开的文件数达到一定的数量,无法打开之后就会进行频繁的IO操作。
-
硬件优化。更快的IO、更多的内存。一般来说内存越大,对于数据库的操作越好。但是CPU多就不一定了,因为他并不会用到太多的CPU数量,有很多的查询都是单CPU。另外使用高的IO(SSD、RAID),但是IO并不能减少数据库锁的机制。所以说如果查询缓慢是因为数据库内部的一些锁引起的,那么硬件优化就没有什么意义。
SQL语句优化
1、通过慢查询日志发现有效率问题的SQL
可以通过开启慢查询日志的方式进行定位有问题的SQL
(1)查看MySQL是否开启慢查询日志
(2)设置没有索引的记录到慢查询日志
(3)查看超过多长时间的sql进行记录到慢查询日志
(4)开启慢查询日志
(5)设置超时时间
(6)查看慢查询日志的位置
2、慢查询日志内容分析
慢查询日志主要分为5部分,第一部分是慢查询时间,第二部分是慢查询的来源主机和用户,第三部分是查询的执行时间、锁定时间、发送的行数、扫描的行数。最后是时间戳形式记录的命令以及该命令的执行的时间戳。
3、通过explain查看SQL的执行计划
索引优化
1、选择索引
(1)选择合适的索引列,选择在where,group by,order by,on从句中出现的列作为索引项,对于离散度不大的列没有必要创建索引。
(2)索引字段越小越好(因为数据库的存储单位是页,一页中能存下的数据越多越好 )
(3)离散度大得列放在联合索引前面
判断离散程度的方法是:
select count(distinct ziduan1),count(distinct ziduan2) from tablename 越大越离散
2、索引优化方法
索引一般情况下都是高效的。不过凡是都有两面性,索引是以空间换时间的一种策略,索引本身在提高查询效率的同时会影响插入、更新、删除的效率。不当的使用索引不仅增加了写操作的负担,也会影响读取的效率。索引越多,数据库分析的越慢。注意点:
(1)InnoDB 每个索引都会加上主键,联合索引不要加上主键,innodb会自动加,否则会冗余。
(2)索引存在的目的是为了加快查询的效率,不过不是索引越多越好,建立索引要适当才好。过多的索引会增加数据库判断使用什么索引来查询的开销,所以,有时候也会出现以去掉重复或者无效的索引为优化手段的优化方式。
(3)主键已经是索引了,所以primay key 的主键不用再设置unique唯一索引了。
数据表结构优化
选择合适的数据类型 (1)使用可存下数据的最小的数据类型。
(2)使用简单地数据类型,int要比varchar类型在mysql处理上更简单。
(3)尽可能使用not null定义字段,这是由innodb的特性决定的,因为非not null的数据可能需要一些额外的字段进行存储,这样就会增加一些IO。可以对非null的字段设置一个默认值。
(4)尽量少用text,非用不可最好分表,将text字段存放到另一张表中,在需要的时候再使用联合查询,这样可提高查询主表的效率。
数据库配置优化
数据库是基于操作系统的,目前大多数MySQL都是安装在linux系统之上,所以对于操作系统的一些参数配置也会影响到MySQL的性能
硬件优化
CPU:CPU并不是越多越好,之前看到网上的分析有说很多的查询都是单CPU的,增加CPU数量并不能提高性能。
存储:机械磁盘 or SSD(当然是SSD更快);单个大磁盘 or 多个小磁盘组合使用(单个1T的磁盘应该没有2个500G磁盘的组合快,因为磁盘的转速都是固定的,两个磁盘相当于可以并行的读取)