加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

高并发之mysql的优化

(2016-08-10 10:08:13)
标签:

mysql性能优化

高并发之mysql优化

mysql优化

mysql优化配置

mysql

分类: web开发
高并发,大流量的系统架构,有好多个方面,这里我简单说一下mysql的优化。


一、根据不同的场景,创建不同的索引(主键、唯一、普通、复合)


二、 分表(垂直分割,水平分割)


三、创建相应的mysql函数、存储过程


四、修改mysql的配置文件(比如:缓存设备,并发数等)



五、在创建表时,表结构要合理,要符合3范式 


六、mysql集群,分流


七、使用缓存(redis),为mysql分流


八、计算机的硬件配置要高


九、如果有条件的情况下,对linux系统的文件系统进行优化,来提高文件的读写。



十、sql语句优化

1、使用left join ,inner join 关联查询时,关联条件最好是两个表的字段类型相同并且两个都是索引,这样查询速试会快。如果没有满足这样的要求,最好是分开查询,然后在业务里面合并

2、比如我们在条件查询或删除时,假设你知道了查询的结果,比如你知道会有2条记录,那么你最好添加一个limit语句,这样查询速度会更快。select * from user where name='zhang' limit 1;

3、避免使用select * 来查询数据

4、我们的主键索引,最好用int的无符号类型这样查询速度会更快,最好不要用varchar类型,这样会降低效率。

5、比如我们知道某个字段的值是字符串,并且其值有限。最好使用ENUM ,比如 性别、国家、民族、状态、部门等。

6、创建字段时,尽可能使用 not null

7、如果你有大量的delete ,insert操作,一定要拆分,比如说你一次性删除10000条记录,结果要用10秒的时候,像delete,insert操作都是锁表的,如果访问量大的网站,10秒的时候,会有很多连接数,打开文件数,会把服务器拉死的。这时你需要在业务里面分开删除,写一个死循环,每1秒删除一个。


8、通过explain来判断sql语句的执行情况,我们主要看以下字段即可;
keys   MYSQL使用的索引,简单且重要
rows  显示MYSQL执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引
Extra  该列包含MySQL解决查询的详细信息

如图:
9、show profiles查看sql语句执行的时间

首先查看show profiles 是否开启
show variables like "%pro%";

开启profiles
set profiling=1;

关闭profiles
set profiling=0;


测试:
select * from user;
update user set name='zhangsan';
select * from user where id=10;




十一、mysql的存储引擎的选择(innoDB,Myisam)

MyIsam与Innodb引擎的区别

MyISAM是非事务安全型的,而InnoDB是事务安全型的。
MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
MyISAM支持全文类型索引,而InnoDB不支持全文索引。
MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

0

阅读 收藏 喜欢 打印举报/Report
前一篇:php之$i++与++$i
后一篇:linux之命令区
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有