龙空技术网

MySQL数据库调优

凡尔赛本赛啊 79

前言:

此时大家对“mysql设置全局参数”大体比较注重,小伙伴们都需要剖析一些“mysql设置全局参数”的相关内容。那么小编也在网络上搜集了一些有关“mysql设置全局参数””的相关知识,希望我们能喜欢,我们快快来了解一下吧!

尽量在金字塔底部进行优化

测试数据可以直接使用官方给定的数据库(由于头条对github链接不能直接使用链接的格式,我这里直接给出)

测试数据准备好后

慢日志查询:慢日志查询是MySQL内置的一项功能,可以记录执行超过指定时间的SQL语句

发现慢SQL的工具

1:Skywalking

2:VisualVM

3:JavaMelody

相关参数及其默认值

log_output:日志输出到哪,默认FILE,表示文件,设置成TABLE,则将日志记录到mysql.slow_log中,也可以设置多种格式,比如FILE,TABLE

long_query_time:超过执行时间才记录到慢查询,单位秒,可以使用小数表示小于秒的时间,默认10

log_queries_not_using_indexes:是否要将未使用索引的SQL记录到慢查询日志。此配置无视long_query_time,生产建议关闭,开发建议开启,默认是关闭的

log_throttle_queries_not_using_indexes:和log_queries_not_using_indexes配合使用,如果log_queries_not_using_indexes打开,则该参数将闲置每分钟写入的,为使用索引的SQL数量,默认是0

min_examined_row_limit:扫描行数达到这么多才记录到慢日志,默认是0

log_slow_admin_statements:是否要记录管理语句,默认关闭,管理语句(ALTER TABLE,ANALYZE TABLE,CHECK TABLE,CREATE INDEX,DROP INDEX...),默认关闭

log_query_file:指定慢查询日志文件路径

log_slow_slave_statements:该参数数据库上设置,决定是否在记录过程中超过long_query_time的SQL,如果binlog是row,则该参数无效

使用方式

1:修改配置文件my.cnf在[mysqld]段落中加入如上参数,然后重启mysql

2:通过设置全局变量,重启后恢复到默认状态

BTree索引,B+Tree索引,Hash索引,Rtree索引

B+tree索引和hash索引的优劣

B+Tree只有根节点保存数据,并且每个根节点持有后续根节点的链接,这样的话支持范围查询,叶子节点可以存放更多的索引

Hash索引一般来说性能是比B+Tree要好,但是当出现hash碰撞时性能比较差,而且只支持等值查询,hash本来就是无序的,所以自然也不支持排序,也不支持范围查询

建议创建索引的场景

1:SELECT语句,频繁作为where条件的字段

2:update/delete语句的where条件

3:需要分组,排序的字段

4:distinct所使用的字段

5:字段的字有唯一性

6:对于多表的联合查询。链接字段建议使用索引

不建议创建索引的情况

1:where子句用不到的字段

2:表记录少(创建索引有额外开销)

3:有大量的重复数据,选择性低(性别)

可能导致索引失效的场景

1:索引列不独立,应该事先计算好表达式的值,避免SQL左侧做计算

select * from table where aa+1="test"

2:索引列不独立(索引字段是函数的参数)

select * from table where SUBSTRING(first_name,1,3)="test"

3:使用了做模糊

select * from table where name like='%zhou'

4:使用OR查询部分字段没索引,分别为没索引的字段添加索引

5:where 条件是字符串(age假如是字符串),但是没有单引号

select * from table where age =20

6:不符合最左前缀原则

7:索引字段建议添加not null约束

标签: #mysql设置全局参数