亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

對比PHP對MySQL的緩沖查詢和無緩沖查詢

2024-05-04 23:47:34
字體:
來源:轉載
供稿:網友

關于緩沖查詢和無緩沖查詢
MySQL的客戶端有兩種類型的查詢:
緩沖查詢:將接收查詢的結果并把他們存儲在客戶端的緩存中,而且接下來獲取行記錄的請求僅僅從本地內獲取。
(1)優點:可以在結果集中自由地移動“當前行”的指針,這樣很容易找到,因為結果是存在客戶端的。
(2)缺點:需要額外的內存來存儲這些結果集,而且需要大量的內存,另外,php中用來運行查詢的函數會一直到所有的結果都接收才會返回值。

無緩沖查詢:會限制你通過嚴格的順序訪問查詢結果。但他不需要額外的內存來存儲整個結果集。你可以在MySQL服務器開始返回值的時候就開始獲取而處理或顯示數據行。當使用無緩沖結果集時,必須使用mysql_fetch_row函數獲取所以的數據行,或者在給服務器發送其他任何命令前用mysql_free_result函數關閉結果集。

哪種類型的查詢好?最好的根據是具體情況而定,無緩沖查詢在結果集巨大的時為你節省大量的臨時內存,而且查詢不需要排序時,php在MySQL數據庫實際上還在處理時就可以獲得第一個數據行。
緩存查詢便于尋找,它可以提供一個全面的尋找加速。因為每一個單獨的查詢的都會快讀結束,mysql快速的獲取結果集并存放在內存中,而不是在處理PHP代碼時保持查詢為可用的。
另外一個無緩沖查詢的限制是在所有的數據行都被讀取或者結果集用mysqli_free_result釋放之前,你將無法向服務器發送任何命令。


PHP+MySQL緩沖查詢和無緩沖查詢
PHP MySQL查詢(mysqli,pdo_mysql)默認使用緩沖模式.
也就是說查詢結果將一次性從MySQL傳輸到PHP進程內存中,
這時可以統計結果集的行數,以及移動結果集指針.
緩沖模式下,如果結果集很大,那么PHP進程也會占用大量的內存,
直到結果集被unset或者free.

store_result用于緩沖模式,所有結果一次性存儲到PHP進程中:

mysqli::query MYSQLI_STORE_RESULT mysqli::store_result mysqli_stmt::store_result 

如果PHP的MySQL數據庫驅動底層用的是libmysqlclient,那么memory_limit不能統計到結果集占用的內存,
除非結果集已經賦值給PHP變量,如果底層使用mysqlnd作為驅動時則可以統計到(PHP從5.4開始底層默認使用mysqlnd).
無緩沖模式下執行的查詢將會返回一個resource資源引用,位于MySQL的查詢結果等待PHP獲取.
無緩沖模式下,PHP進程占用的內存很少,但會增大MySQL服務器的負載.
在PHP取回所有結果前,在當前數據庫連接下不能發送其他的查詢請求.

use_result表示無緩沖查詢:

mysqli::query MYSQLI_USE_RESULT mysqli::use_result 

總結:
當結果集不大時,或者需要在讀取所有行前獲取結果集行數時,使用緩沖查詢(默認).
當結果集很大時,使用無緩沖查詢,避免PHP進程占用大量的內存.

$rs = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $rs = $pdo->query("SELECT * FROM City"); 

默認情況下,mysqli_stmt的SELECT查詢結果將留在MySQL服務器上,等待fetch方法把記錄逐條取回到PHP程序中,這樣做會降低性能,但能節省內存.
如果需要對所有記錄進行處理,可以調用mysqli_stmt::store_result,把所有結果一次性全部傳回到PHP程序中,
這樣做更高效,能減輕MySQL服務器的負擔,雖然內存占用會多一些.
如果獲取SELECT語句查找到了多少條記錄,可以用 mysqli_stmt::$num_rows 獲取.
這個屬性只有在提前執行過 mysqli_stmt::store_result 方法,將全部查詢結果傳回到PHP程序中的情況下才可以使用.
對比 mysqli_result::$num_rows 則不沒有這個限制.
用 mysqli_stmt::free_result 關閉 mysqli_stmt::store_result:

$stmt->store_result(); echo $stmt->num_rows; $stmt->free_result(); 
mysqli_stmt::store_result能讓mysqli_stmt::fetch更高效,但也需要用mysqli_stmt::free_result顯式關閉.
可以用mysqli_stmt::get_result拿到結果集對象$result,然后mysqli_result::fetch_all拿到查詢數組$results:
$result = $stmt->get_result(); $results = $result->fetch_all(MYSQLI_ASSOC); 
整理一下相關參數:
mysqli::query//執行SQL,成功返回mysqli_result(SELECT,SHOW,DESCRIBE操作)對象或TRUE(其他操作),失敗返回FALSE.用mysqli::close關閉.mysqli::prepare//預處理SQL,成功返回statement對象,失敗返回FALSE.mysqli_stmt::execute//執行SQL.用mysqli_stmt::close關閉.mysqli_stmt::store_result//取回全部查詢結果(SELECT,SHOW,DESCRIBE,EXPLAIN)到PHP,可選.用mysqli_stmt::free_result關閉.mysqli_stmt::bind_result//把prepare和execute產生的結構綁定結果到變量,然后在mysqli_stmt::fetch中把這些變量輸出或賦值.mysqli_stmt::fetch//每次返回結果集的一條,賦值給mysqli_stmt::bind_result綁定的變量.mysqli_stmt::get_result//獲得結果對象,然后調用mysqli_result::fetch_all就能返回結果集數組.mysqlnd下可用.mysqli_result::fetch_all//返回一個結果集數組(MYSQLI_NUM(默認),MYSQLI_ASSOC,MYSQLI_BOTH),用mysqli_result::close關閉.mysqlnd下可用.mysqli_result::fetch_array//每次返回結果集的一條,包含一個一維的數字數組和關聯數組.mysqli_result::fetch_assoc//每次返回結果集的一條,即一個一維的關聯數組.mysqli_result::fetch_row//每次返回結果集的一條,即一個一維的數字數組.


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧洲中文字幕国产精品| 日本视频久久久| 久久亚洲欧美日韩精品专区| 亚洲精品网址在线观看| 亚洲第一区中文99精品| 51色欧美片视频在线观看| 亚洲男人天堂古典| 国产一区二区在线免费视频| 91在线高清视频| 亚洲精品久久久久国产| 国产日韩欧美综合| 欧美人与性动交| 亚洲午夜激情免费视频| 日韩有码在线电影| 久久影院免费观看| 精品视频在线播放| 午夜精品国产精品大乳美女| 日韩国产精品一区| 欧美性猛交xxxx久久久| 欧美专区福利在线| 国产日韩av在线| 欧美日韩国产丝袜美女| 精品少妇v888av| 中文字幕一区二区三区电影| 国产精品在线看| 欧美福利视频在线| 亚洲第一网中文字幕| 亚洲男人的天堂在线| 精品一区二区三区四区在线| 国产欧美日韩高清| 欧美午夜女人视频在线| 免费91麻豆精品国产自产在线观看| 视频在线一区二区| 在线精品播放av| 亚洲一区亚洲二区亚洲三区| 亚洲最大福利视频网| 性色av一区二区三区免费| 成人免费高清完整版在线观看| 国产精品成人观看视频国产奇米| 欧美日韩激情小视频| 国产成人精品优优av| 欧美精品少妇videofree| 国自在线精品视频| 亚洲第一天堂无码专区| 亚洲欧美日韩在线一区| 亚洲国产成人精品久久| 91九色综合久久| 91久久久久久久久久久久久| 亚洲人成网站在线播| 九九视频这里只有精品| 午夜美女久久久久爽久久| 国内精品久久久久久影视8| 少妇高潮 亚洲精品| 欧美日韩在线看| 日韩中文视频免费在线观看| 亚洲春色另类小说| 国产成人综合一区二区三区| 91精品国产乱码久久久久久久久| 国产精品激情av电影在线观看| 91情侣偷在线精品国产| 亚洲精品福利在线观看| 伊人久久久久久久久久久久久| 2019中文在线观看| 国产精品盗摄久久久| 亚洲xxxxx性| 国产一区二区三区毛片| 欧美日韩成人在线视频| 2018中文字幕一区二区三区| 欧美刺激性大交免费视频| 成人黄色生活片| 中文字幕av一区二区三区谷原希美| 亚洲激情第一页| 国产精品成人一区| 国产va免费精品高清在线观看| 97精品一区二区三区| 在线精品国产成人综合| 原创国产精品91| 午夜美女久久久久爽久久| 成人免费激情视频| 亚洲精品av在线播放| 国产欧美日韩91| 91久久夜色精品国产网站| 日韩欧美亚洲一二三区| 欧美一级视频在线观看| 亚洲国产精品成人精品| 在线观看国产精品91| xvideos成人免费中文版| 国产精品激情自拍| 中文字幕国内精品| 91精品视频在线播放| 亚洲一级黄色片| 亚洲美女激情视频| 久久精品在线视频| 国产精品久久不能| 日韩在线视频免费观看| 欧美一级免费视频| 亚洲国产日韩精品在线| 青草青草久热精品视频在线观看| 中文字幕精品一区二区精品| 亚洲色图激情小说| 日韩电影中文字幕在线观看| 亚洲欧美国产精品久久久久久久| 精品国产欧美一区二区三区成人| 91天堂在线视频| 亚洲日本中文字幕免费在线不卡| 日韩视频在线免费| 国产精品成人av性教育| 欧美日韩综合视频网址| 欧美—级高清免费播放| 久久久久久噜噜噜久久久精品| 亚洲国产97在线精品一区| 亚洲片国产一区一级在线观看| 国产欧美久久一区二区| 亚洲第一色中文字幕| 亚洲日韩中文字幕在线播放| 久久久久久久久久av| 日韩高清人体午夜| 久久久久久久久国产| 国产精自产拍久久久久久| 亚洲精品久久久一区二区三区| 亚洲国产黄色片| 国产日韩欧美视频| 国产精品亚洲美女av网站| 日韩精品在线免费观看| 91国产中文字幕| 亚洲男人7777| 亚洲xxxx在线| 久久韩剧网电视剧| 国语自产精品视频在线看一大j8| 欧美一级片久久久久久久| 国产精品久久久久久久久久小说| 欧美国产乱视频| 欧美高清视频免费观看| 日韩欧美成人区| 久久久精品一区二区三区| 亚洲欧美综合另类中字| 国产精品扒开腿做| 97色在线观看免费视频| 亚洲综合精品一区二区| 国产精品第七十二页| 久久99精品久久久久久噜噜| 国产精品毛片a∨一区二区三区|国| 亚洲精品在线看| 91亚洲国产成人久久精品网站| 国模视频一区二区| 国产精品激情自拍| 日韩av在线免播放器| 在线观看91久久久久久| 久久久久亚洲精品国产| 欧美在线免费视频| 91网站免费看| 亚洲国产小视频| 上原亚衣av一区二区三区| 精品亚洲aⅴ在线观看| 久久久久久久一区二区| 最好看的2019年中文视频| 国产精品视频一区二区高潮| 亚洲自拍小视频| 午夜美女久久久久爽久久| 亚洲视频日韩精品| 亚洲无av在线中文字幕| 日本中文字幕久久看| 国产婷婷色综合av蜜臀av| 色午夜这里只有精品|