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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當在代碼中作為準備好的語句運行時,MySQL 查詢在 PHP 中運行緩慢

當在代碼中作為準備好的語句運行時,MySQL 查詢在 PHP 中運行緩慢

Go
江戶川亂折騰 2023-06-26 17:48:05
我正在嘗試調(diào)試的 PHP 應(yīng)用程序在更大的 MySQL 數(shù)據(jù)庫上運行了幾個設(shè)計不當?shù)牟樵?。有幾個頁面確實很慢,結(jié)果發(fā)現(xiàn)是因為一些查詢。我開始一一檢查每個查詢,雖然它們很慢,但它們本身并沒有那么慢。經(jīng)過進一步調(diào)試后發(fā)現(xiàn),只有當應(yīng)用程序?qū)⑺鼈冏鳛闇蕚浜玫恼Z句運行時,它們才會變慢。如果我通過 MySQL 客戶端手動運行查詢,大約需要 300 毫秒。如果我通過 MySQL 客戶端運行創(chuàng)建一條準備好的語句并設(shè)置參數(shù)并運行它,大約需要 300 毫秒。如果我從 PHP (mysqli) 運行簡單查詢,大約需要 300 毫秒。如果我像應(yīng)用程序一樣通過mysqli預(yù)準備語句運行它,則需要 100 秒。我想也許是這樣,mysqli所以我用PDO嘗試了一下,結(jié)果是一樣的。嘗試了不同的 PHP 版本(5.6、7.2、7.3)并得到相同的結(jié)果。所以我給了最后一次機會,寫了一個小的 Go 腳本來測試,我得到了相同的結(jié)果,并且事情得到了改進?,F(xiàn)在,如果我從 MySQL 客戶端或 MySQL Workbench 或 PHPStorms 數(shù)據(jù)庫客戶端運行查詢的準備語句版本,速度會很快。如果我從代碼中運行查詢,速度會非???。任何關(guān)于我應(yīng)該照顧什么、我應(yīng)該在哪里繼續(xù)調(diào)試的幫助將不勝感激。
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經(jīng)驗 獲得超7個贊

事實證明,這是由略有不同的執(zhí)行計劃引起的。MySQL似乎純粹根據(jù)語句創(chuàng)建執(zhí)行計劃,不包括通過mysqlior使用預(yù)備語句時的參數(shù)值PDO,這是有道理的。然而,當它提供完整的查詢時,在我們的例子中,它引入了對其中一個表的優(yōu)化,這產(chǎn)生了巨大的差異。

其中一個表(有 550 萬行)Using join buffer (Block Nested Loop)在使用非準備語句運行時有 Extra,而使用準備語句則沒有。這似乎為我們帶來了近 1000 倍的性能差異。

我仍然不確定為什么這通過 PHPStorm 或 CLImysql客戶端沒有問題,我最好的猜測是,MySQL 中的某些 API 期望在準備語句時執(zhí)行計劃完成,而其他 API 和 CLI 客戶端則不這樣做't。


查看完整回答
反對 回復(fù) 2023-06-26
  • 1 回答
  • 0 關(guān)注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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