云计算学习100天-第54天-MySQL数据库学习10
目录
约束
是一种限制,设置在表头上,用来控制表头的赋值
not null 非空 注意:null Null ""都不同
default 默认值
unique 唯一索引 用于保证该字段的值具有唯一性,可以为空
PRIMARY KEY 主键 用于保证该字段的值具有唯一性并且非空
FOREIGN KEY 外键 用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中的值
MySQL调优
影响处理速度的因素
硬件配置低
网络带宽窄
存储架构不合理
复杂的查询语句
服务运行参数设置不合理
调优方法——
启动慢查询日志
用途:保存耗时较长查询命令
参数:
slow-query-log 启动日志
long-query-time 设置超时时间,单位秒,默认超过10秒
命令:
统计日志信息
mysqldumpslow /目录/日志文件命令
操作步骤:
1、配置文件参数
vim /etc/my.cnf
4: [mysqld]
5: slow-query-log
6: long-query-time=0.3超时0.3秒还在执行的查询命令记录到日志中
2、重启服务
systemctl restart mysqld
#日志文件自动生成 名称为主机名-slow.log
ls /var/lib/mysql/host50-slow.log
3、如果有sql查询语句的执行超过0.3秒,就会记录到该文件中
#输出统计信息并放入文件,文件可以提交给程序员分析
mysqldumpslow /var/lib/mysql/host50-slow.log >sql.txt
cat sql.txt
设置查询缓存
命令:
查看缓存配置项
show variables like “%query_cache%”;
查看查询缓存统计信息
show status like “qcache%”;
查询总访问量
show status like “%com_select%”;
查询缓存命中率=(Qcachd_hits/Cin_sekect)*100%
命中率理论上越高越好
操作步骤:
1、登录数据库,查看缓存配置项
mysql –uroot –p123456
mysql>show variables like “%query_cache%”;
have_query_cache #默认YES,启用查询缓存
query_cache_limit
query_cache_min_res_unit
query_cache_size #默认1M,查询缓存大小,单位字节,就是要拿出多少内存用于查询缓存
query_cache_type #默认OFF,表示数据不放入查询缓存中,on表示允许,demand表示按需缓存
query_cache_wlock_invalidate
mysql>exit
2、设置配置项,允许数据放入查询缓存中
vim /etc/my.cnf
4: [mysqld]
5: query_cache_size=10485760
6: query_cache_type=on
3、重启服务即可
systemctl restart mysqld
4、验证数据是否写入查询缓存
mysql –uroot –p123456
mysql>show status like “qcache%”;
显示的值里面要关注如下:
Qcache_hits #在缓存中查找数据的次数,默认是0
Qcache_inserts #在硬盘中查找数据的次数,默认是0
mysql>select name from tarena.user where name=”root”;
mysql>show status like “qcache%”;
查询后值就变了
Qcache_inserts的值就变成1了,表示在硬盘中查找了一回
mysql>select name from tarena.user where name=”root”;
mysql>show status like “qcache%”;
再查询一次
Qcache_hits的值变为1了,因为第一次查询完后数据放入缓存中了,同样的查找先从缓存中查找
Qcache_inserts的值仍然是1
mysql>select name from tarena.user where name=”abc”;
mysql>show status like “qcache%”;
新的查询是从硬盘里查找
Qcache_inserts的值为2
Qcache_hits的值还是2
5、计算命中率
mysql> show status like “%com_select%”;
#根据获得的总访问量计算缓存命中率,理论上越高越好
注意:内存设置的越大越好,提高命中率,高命中率意味着更多查询可以直接从内存获取数据,减少磁盘 I/O 操作,显著提升数据库性能。但是命中率不一定越高越好,理想命中率范围如下:
InnoDB Buffer Pool——
推荐命中率:95%-99%
过低(<90%):可能内存不足或访问模式不合理
过高(>99.9%):可能内存配置过大,造成资源浪费4
Query Cache——
推荐命中率:70%-90%
过高可能意味着缓存空间过大,影响写性能
更多推荐



所有评论(0)