ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

php – MySQL查询性能和Codeigniter

2019-06-24 17:04:37  阅读:340  来源: 互联网

标签:php mysql sql codeigniter


我有这个MySQL查询,我正在加载到我的家庭控制器,并在运行Codeigniter的$this-> output-> enable_profiler(TRUE);我的执行时间为5.3044

我的模型中的查询:

class Post extends CI_Model {

    function stream($uid, $updated, $limit) {
        $now = microtime(true);
        $sql = "
            SELECT 
                * 
            FROM 
                vPAS_Posts_Users_Temp 
            WHERE 
                post_user_id = ? 
                AND post_type !=4 
                AND post_updated > ?
                AND post_updated < ? 
            UNION 

            SELECT 
                u.* 
            FROM 
                vPAS_Posts_Users_Temp u 
            JOIN 
                PAS_Follow f 
                ON f.folw_followed_user_id = u.post_dynamic_pid 
                WHERE u.post_updated > ?
                AND post_updated < ? 
                AND (( f.folw_follower_user_id = ? AND f.folw_deleted = 0 ) 
                OR ( u.post_passed_on_by = f.folw_follower_user_id OR u.post_passed_on_by = ? AND u.post_user_id != ? AND u.post_type =4 )) 
            ORDER BY 
                post_posted_date DESC 
            LIMIT ?
        "; 

        $query = $this->db->query($sql, array($uid, $updated, $now, $updated, $now, $uid, $uid, $uid, $limit));

        return $query->result();
    }

}

我可以在这做任何事情来改善执行时间,从而增加我的页面加载吗?

编辑

解释结果

MySQL Workbench Visual Explain

解决方法:

也许你不会相信它,但不要在你的SQL中检索SELECT *.只需写下你想要检索的字段,我认为它会加速很多.

我已经看到在执行查询时(从0.4秒到0.02秒)的速度增加超过20次,只需更改*为必填字段.

其他事项:如果表中的INSERT上有auto_increment id,请不要将post_posted_date用作ORDER字段.按DATETIME字段排序很慢,如果您可以使用INT id(希望您将作为索引),您将更快地获得相同的结果.

UPDATE

根据问题的要求,技术原因:

>不使用SELECT *:Which is faster/best? SELECT * or SELECT column1, colum2, column3, etc.这适用于SQL,但适用于MySQL(不像之前的问题那样完整)mySQL Query – Selecting Fields
>对于按Datetime排序:SQL,SQL Server 2008: Ordering by datetime is too slow,以及与MySQL相关的:MySQL performance optimization: order by datetime field

奖励:学习如何设置索引:http://ronaldbradford.com/blog/tag/covering-index/

标签:php,mysql,sql,codeigniter
来源: https://codeday.me/bug/20190624/1280147.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有