mysql性能优化

如何查询和开启慢查询

查看是否开启了慢查询日志
show variables like ‘%query%’;

slow_query_log = off : 没开启
slow_query_log_file //log文件位置
long_query_time //记录执行超过多长时间的sql

linux环境:

在/etc/my.conf 文件的 [mysqld] 选项下设置 slow_query_log = true,其余两项根据个人需求设置

windows环境:

找到my.ini 在[mysqld]下配置同上

优化原则

mysql查询每次只能使用一个索引
索引不会包含有 null 值的列,设置字段是尽量不要用null,可以默认0
一般情况下不鼓励使用 like 操作。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引
不要在列上进行运算
少使用not in
尽量用join 连接查询代替子查询
(子查询就是查询结果被当作外层条件的这样一个语句。)

什么情况下使用索引

表的字段需要唯一约束
直接条件查询的字段(where 后)
查询中与其它表关联的字段 (a join b on a.uname = b.name )
查询中排序的字段 ( order by )
查询中统计或分组统计的字段 ( group by )

什么情况下应不建或少建索引

表记录太少
经常插入、删除、修改的表
数据重复且分布平均的表字段

如果where条件中是OR关系,加索引不起作用。如果是and,则无论and左或右有索引都会用到索引,如果两边都有索引,则用到的是左边的(左右两边为联合索引除外)
联合索引符合最左原则,如 索引 a,b,c 则查询a / a,b/a,b,c都会用到索引,但是查询b,c 不会用到该索引

优化服务器硬件

配置大的内存
配置高速磁盘
合理分配磁盘IO,把磁盘IO分散到多个设备上
配置多核处理器

优化mysql参数

(根据硬件,业务场景来设置参数,一般设置大点好)
key_buffer_size :索引缓冲区大小
table_cache :同时打开表的个数
sort_buffer_size :排序缓冲区大小,大小影响排序分组速度
read_buffer_size:为扫描的每个表分配的缓冲区大小(字节)
read_md_buffer_size
innodb_buffer_pool_size:表示innoodb类型的表和索引的最大缓存
query_cache_size:查询缓冲区大小 与query_cache_type配合使用

部分内容参考文章: http://www.cnblogs.com/softidea/p/5977860.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值