您的位置:首页 > 数据库 > MySQL

mysql性能优化

2017-08-25 18:39 197 查看

如何查询和开启慢查询

查看是否开启了慢查询日志

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 性能优化