我有这个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
根据问题的要求,技术原因:
https://www.icode9.com/content-2-264751.html