【发布时间】:2014-03-06 15:20:08
【问题描述】:
我有这个 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 可视化解释
【问题讨论】:
-
你在f.folw_followed_user_id和u.post_dynamic_pid这两个字段上设置了索引吗?
-
你看过查询
EXPLAIN的输出了吗? -
@jeff 我在
f.folw_followed_user_id上有,但另一个字段是在查询中动态创建的,所以我不确定如何执行此操作 -
@bmused 添加了我的
Explain结果 -
使用mysql工作台检查查询执行的性能
标签: php mysql sql codeigniter