小弟我碰到的MySQL性能优化点
我碰到的MySQL性能优化点 1.在foreach中调用接口(里面执行了查询一条的sql语句) 改进:先将要查询的字段收集到数组里面,然后用in调用一次接口: /** * @brief 式化数据 (收集数组中的字段,最后用in查询) * @param params 原始数组 * @param fields 所需
我碰到的MySQL性能优化点1.在foreach中调用接口(里面执行了查询一条的sql语句) 改进:先将要查询的字段收集到数组里面,然后用in调用一次接口:
/**
* @brief 格式化数据(收集数组中的字段,最后用in查询)
* @param params 原始数组
* @param fields 所需字段
* @return ret 返回数组
* @desc 从数组中获取需要字段,组成新的数组返回,主要用于改变数据库返回数据的格式
*/
public static function getNeedFromListArray($params , $fields) {
$ret = array();
foreach($params as $key => $value) {
$ret[] = $value[$fields];
}
return $ret;
}
2.小集合驱动大集合:先使用子sql语句查询出小的集合,然后再查大的
select s.follow_user_id,p.calledtotallen,p.calling_time
from
(select p.calledtotallen,p.calling_time
from phone_call_log_current p '. $where2 .') p
left join car_sale s on p.sale_id = s.id '.$where1.'
order by p.calling_time desc
limit 0, 10'
3.查询一条数据的时候使用limit 1。(这个就不用例子了)
4.给where,join中的字段增加索引。(平时都是DBA加)
5.用什么数据就查询什么数据
不要图省事用select *
6.建立数据库之前,不要使用NULL(在IOS/Android中出现NULL可能导致崩溃)导致Android/IOS崩溃的null----PHP和Android/IOS数据交互
崩溃了两次之后,为了兼容旧数据,还用了个递归函数,专门来处理这些NULL
7.使用数据为int类型时,不要使用单引号,会降低效率
where id = '123';
加了单引号,成了string,效率更低
8.建立好日志和异常处理非常重要,可以迅速知道,在哪里出现了瓶颈。(尤其是慢查询日志)
这个是所有的模块都要处理的东西。
9.不要使用like字段,如果必须模糊搜索,使用sphinx等,效率和性能会大大提升
like会阻塞掉其他的sql查询