目录

约束

MySQL调优

影响处理速度的因素

调优方法——

启动慢查询日志

命令:

操作步骤:

设置查询缓存

命令:

操作步骤:


约束

是一种限制,设置在表头上,用来控制表头的赋值

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%

过高可能意味着缓存空间过大,影响写性能‌
 

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐