一、Mysql高并发处理
例子1:新增手机号码,先判断是否已经存在,如果不存在则插入,在低并发访问情况下不会发生问题,在高并发下则会插入多条数据。
解决方案:通过写sql实现,在插入之前先判断是否已经存在数据。
INSERT INTO test SET(id,username,phone) SELECT '1','测试','10086' FROM DUAL WHERE NOT EXISTS SELECT 1 FROM test WHERE phone = '10086';
也可以给这个字段设置唯一性。
例子2:高并发修改同一条数据
解决方案:加锁。
乐观锁:根据版本号更新数据
悲观锁:在数据库层面将数据锁死,不给其他线程使用
二、mysql优化:
1、表优化
1)能尽量使用数字类型的就不用使用字符串类型,因为在查询时,如果是字符串类型的,需要一个一个字符查询,而数字类型只需要查询一次;
2)每个字段的长度要尽量短,这样可以提高查询效率,而且在建立索引时也能减少资源消耗;
3)char类型查询快,但是占空间,varchar类型查询相对慢,但是可以节省空间,这个怎么使用需要看你需要保存什么信息,查询频繁的字段是什么;
2、查询优化
1)在保证功能基础上尽量减少对数据库的访问;
2)查询尽量减少查询的行数,比如你查下某个省份下的某个城市,如果你的sql同时where省份和城市就比直接where城市的查询速度慢;还有,当你where有多个查询条件时,查询那个字段扫描行数也少的就要先放到前面;
3)查询时不要使用*,你需要使用那几个字段就直接查那几个;
4)对于复杂的查询,耗时的查询,尽量分开处理,提高mysql的响应速度;
5)还有就是加索引
6)表分区,分表也可以