前言:
此时大家对“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设置全局参数