MySQL优化篇

MySQL配置文件在安装路径下有这几个文件:

 

1.my-huge.ini

 

2.my-medium.ini

 

3.my-large.ini

 

4.my-small.ini

 

不同流量和不同服务器环境,选择上述的不同配置文件。一般情况下,my-medium.ini能够满足大部分需求。

 

show variables;可以查看目前所有的参数.

 

先来看看三个重要的参数:key_buffer_size,query_cache_size,table_cache

 

key_buffer_size仅对MyIsam表起作用,他指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引的读速度。

 

一般我们设置为16M,实际上大一点的站点,这个参数是远远不够的。

 

通过查看key_reads : key_read_requests,可以知道key_buffer_size是否合理。

 

key_reads : key_read_requests应该尽可能的低,至少是1:100或1:1000更好。

 

上述状态值可以使用show status like 'key_read%'.

 

下面是一组运行了30天的MySQL运行信息:

 

key_buffer_size : 128M

 

key_read_requests:65075289

 

key_reads:79112

 

比例接近1:8000,说明状况非常好

 

从4.0.1开始,Mysql提供了查询缓冲机制。使用查询缓冲,mysql将select和查询结果

 

存放在缓冲区中,今后对于同样的select语句(区分大小写),将直接从缓冲区中读取

 

查询结果。根据mysql用户手册,使用查询缓冲最大可以达到238%的效率提升。

 

通过调节一下几个参数可以知道query_cache_size设置是否合理:

 

Qcache inserts,Qcache hits,Qcache lowmem prunes,Qcache free blocks,Qcache total blocks

 

Qcache_lowmem_prunes的值非常大,则说明经常出现缓冲不够的现象,同时Qcache_hits的值

 

非常大,则说明查询缓冲使用非常频繁,此时需要增加缓冲大小Qcache_hits的值不大,则表明查

 

询重复效率很低。这种情况下使用查询缓冲反而影响效率。在select中加入SQL_NO_CACHE则不

 

缓冲结果。

 

Qcache_free_blocks,如果该值非常大,则表明缓冲区碎片很多。

 

Query_cache_type决定是否使用查询缓冲。

 

table_cache指定表告诉缓存的大小。每当Mysql访问一个表时,如果在缓冲区还有空间,该表就

 

被打开并放入其中,这样可以更快的访问内容。通过检查峰值时的状态值open_tables和opened_Tables,可以决定是否需要增加table_cache值。

 

如果你发现open_tables等于table_cache并且opened_tables在不断增长,那么就需要增加table_cache值了。不能盲目的把table_cache设置的很大,否则会造成文件描述符不足,从而导致性能不稳定或者连接失败。

 

多余1G内存的机器,推荐128-256M。

 

下面是一台运行了30天的机器,设置table_cache=256

 

得到一下状态:open tables 256;  opened tables 9046

 

虽然open_tables等于table_cache,但相对于服务器运行时间,已经运行了30天,opened_tables的值也非常低,所以无需增加table_cache.

 

如果仅仅在6个小时内疚出现上述状态信息,那么就需要考虑加大table_cache了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL高级篇索引优化主要涉及MySQL Query Optimizer(查询优化器)和索引的使用。MySQL Query Optimizer是MySQL中负责优化SELECT语句的模块,通过计算分析系统中收集到的统计信息,为客户端请求的Query提供最优的执行计划,即最优的数据检索方式。索引是帮助MySQL高效获取数据的数据结构,它可以提供排序和查询的功能。 在索引优化中,需要考虑以下情况适合建立索引: 1. 主键自动建立唯一索引。 2. 频繁作为查询条件的字段应该创建索引。 3. 查询中与其他表关联的字段,尤其是外键关系,应建立索引。 4. 单键或组合索引的选择问题,通常在高并发情况下倾向于创建组合索引。 5. 查询中排序的字段,通过索引进行访问可以大大提高排序速度。 6. 查询中用于统计或分组的字段。 而以下情况不适合建立索引: 1. Where条件中用不到的字段不需要创建索引。 2. 表记录太少,通常建议超过300万条记录再考虑建立索引。 3. 经常进行增删改操作的表,建立索引可以提高查询速度,但同时会降低更新表的速度。 4. 数据重复且分布平均的字段,对于包含许多重复内容的数据列,建立索引没有太大实际效果。 因此,在索引优化中,应该根据具体情况选择最经常查询和最经常排序的数据列来建立索引,避免对不需要的字段建立索引,以提高查询效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL高级篇(SQL优化、索引优化、锁机制、主从复制)](https://blog.csdn.net/yuan2019035055/article/details/122310447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值