Home  >  Article  >  Database  >  小弟我碰到的MySQL性能优化点

小弟我碰到的MySQL性能优化点

WBOY
WBOYOriginal
2016-06-07 16:25:001422browse

我碰到的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查询


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn