第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 for 循環(huán)的性能 MySQL 查詢

使用 for 循環(huán)的性能 MySQL 查詢

PHP
桃花長相依 2021-12-03 16:30:06
在這種方法中,首先我必須獲得兩個(gè)日期之間的星期日日期,在這種情況下大約是 1 年。然后我在 for 循環(huán)中查看日期并將它們設(shè)置為查詢。我prepared statements用來讓它更快。//Get the first day and last day$dateInitial = strtotime('2018-08-21');$dateFinal   = strtotime('2019-08-21');$final       = array();$sql = "SELECT id_product, product, plant_sowing, plant_production, area_planting, CONCAT(id_product,'_', weeks) AS identity              FROM (                    SELECT sw_sowing.id_product, pr_products.product, sw_sowing.type, YEARWEEK(:dates,3) AS weeks, SUM(sw_sowing.quantity) AS plant_sowing,                           SUM(IF(ROUND(DATEDIFF(TIMESTAMPADD(DAY,(6-WEEKDAY(:dates)), :dates), sw_sowing.date)/7)>=sw_sowing.weeks_prod, sw_sowing.quantity,0)) AS plant_production,                           ((SUM(sw_sowing.quantity))/pr_products.plant_m2) AS area_planting                    FROM (                          SELECT MAX(id) AS id                          FROM sw_sowing                          WHERE status != 0                          AND id_tenant = :id_tenant                          AND date <= :dates                          AND multiply != 1                          AND id_product = 1                          GROUP BY id_production_unit_detail                    ) AS sw                    INNER JOIN sw_sowing ON sw_sowing.id = sw.id                    INNER JOIN pr_products ON pr_products.id = sw_sowing.id_product                    INNER JOIN pr_varieties ON pr_varieties.id = sw_sowing.id_variety                    WHERE pr_varieties.code != 1                    GROUP BY sw_sowing.id_product, sw_sowing.type                    HAVING type NOT IN('ER','PR')              ) AS s";$statement    = $this->db->prepare($sql);但盡管如此,它并沒有那么快。查詢持續(xù) 5 秒,我希望它更快。我還為表格編制了索引。我想要一些關(guān)于如何最好地優(yōu)化此查詢的意見,或者我執(zhí)行查詢的方式是否足夠。這是我之前做過的一個(gè)關(guān)于為什么我使用GROUP BY和MAX(id)
查看完整描述

2 回答

?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

優(yōu)化它的最簡單方法是創(chuàng)建一個(gè)程序,該程序:

  1. 將開始和結(jié)束日期作為參數(shù)

  2. 循環(huán)遍歷日期以查找星期日并將它們放入臨時(shí)表中

  3. 使用臨時(shí)表加入您的查詢并一次返回所有

通過這種方式,您可以執(zhí)行一次實(shí)際查詢而不是 52 次。應(yīng)該會(huì)快很多。

您需要檢查的另一件事是內(nèi)部查詢的GROUP BY子句。查詢返回剛剛MAX(id)所以GROUP BY不需要。

臨時(shí)表的使用示例:

create procedure sp_sample( in_start date, in_end date)

begin


declare v_date date;


SELECT in_start + INTERVAL 6 - weekday(in_start) day into v_date;


drop temporary table if exists sundays_tmp;

create temporary table sundays_tmp (

d date

);


while (v_date<in_end) do

  insert into sundays_tmp values (v_date);


  select v_date + INTERVAL 7 day into v_date;

end while;


-- Your query here


end


查看完整回答
反對(duì) 回復(fù) 2021-12-03
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

FLOOR((TO_DAYS(`date` - 737080)/7)

會(huì)給你一個(gè)“周數(shù)”,你可以使用它GROUP BY。使用它應(yīng)該可以讓您一次性獲得所有結(jié)果,而不需要在其中包含應(yīng)用程序循環(huán)SELECT。

我不明白 的重要性MAX(id),所以我無法解決其余的問題。


查看完整回答
反對(duì) 回復(fù) 2021-12-03
  • 2 回答
  • 0 關(guān)注
  • 259 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)