高并发之mysql的优化

标签:
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)。
前一篇:php之$i++与++$i
后一篇:linux之命令区