gpt4 book ai didi

php - 优化 sql 查询 PHP Phalcon

转载 作者:行者123 更新时间:2023-11-29 18:59:28 25 4
gpt4 key购买 nike

我有这个代码:

            if(($banners = $this->app->cache5min->get($key_cache)) === NULL) {
$find_items = array();
$banners = $this->app->db->fetchAll("
SELECT b.id,b.active, b.richmedia, b.rich_position, b.ip_limit,
b.cookie_limit, b.cookie_interval, b.day_limit, b.limit_interval,
b.frequency, b.close_btn, b.use_geo,
bpl.s_x, bpl.s_y
FROM bs_items_places AS bp
LEFT JOIN bs_items AS b ON b.id = bp.item_id
LEFT JOIN bs_places AS bpl ON bpl.id = bp.place_id
WHERE b.active = 1
AND b.date_start < '".$dateNow."'
AND b.date_stop > '".$dateNow."'
AND bpl.active = 1
AND bp.place_id = {$idpl}
AND (IF((time_from!='00:00:00' AND time_to!='00:00:00'),
(time_from<='".$dateTimeNow."'
AND time_to >='".$dateTimeNow."'), 1)
)
GROUP BY b.id
ORDER BY b.frequency DESC, b.day_limit DESC
");
foreach($banners AS $bnr) {
$find_items[$bnr['id']] = $bnr;
}
$banners = $find_items;
$this->app->cache5min->save($key_cache,$banners);
}

//echo '<pre>'; print_r($banners); exit;
if(!$banners || !count($banners)) { return $this->getDefaultBanner($idpl,$x); }

当我删除第一条语句时,我的CPU很好,当我返回第一条语句时,我的CPU 100%,这给了mysql进程,我如何优化选择查询?

最佳答案

第一步是摆脱LEFT,除非你需要它。这可能会带来更多优化选项。

这种构造本质上是不可优化的:

WHERE start < ...
AND end > ...

存在“爆炸-内爆”问题。首先,行数由于JOIN而爆炸,然后又因GROUP BY而爆炸。但是...同时,不存在诸如 COUNT()SUM() 之类的“聚合”。所以这听起来像是一个格式不正确的查询 - 为什么你需要执行GROUP BY?如果你得到“重复”的行,那么你就会遇到一个更糟糕的问题——不重复的列会发生什么?您将获得随机值。看看没有 GROUP BY 会发生什么。

bp 上的此综合索引可能有帮助:

INDEX(place_id, item_id)

关于php - 优化 sql 查询 PHP Phalcon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43974335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com