日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

    歡迎訪問 生活随笔!

    生活随笔

    當前位置: 首頁 > 运维知识 > 数据库 >内容正文

    数据库

    mysql php 缓存机制_mysql数据库查询缓存原理是什么

    發布時間:2023/12/19 数据库 29 豆豆
    生活随笔 收集整理的這篇文章主要介紹了 mysql php 缓存机制_mysql数据库查询缓存原理是什么 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

    mysql數據庫查詢緩存原理是:1、緩存SELECT操作的結果集和SQL語句,key為sql,value為查詢結果集;2、如果新的SELECT語句到了,以這個sql為key去緩存中查詢,如果匹配,就把緩存的結果集返回。

    mysql數據庫查詢緩存原理是:

    概述

    查詢緩存(Query Cache,簡稱QC),存儲SELECT語句及其產生的數據結果。閑來無事,做一下這塊的總結,也做個備忘!

    超詳細的mysql數據庫查詢緩存總結,值得收藏

    工作原理緩存SELECT操作的結果集和SQL語句,key為sql,value為查詢結果集;

    如果新的SELECT語句到了,以這個sql為key去緩存中查詢,如果匹配,就把緩存的結果集返回;

    匹配標準:與緩存的SQL語句是否完全一樣,sql中字母區分大小寫以及中間的空格,簡單理解為存儲了一個key-value結構,key為sql,value為sql查詢結果,匹配時使用Java的String的equals(),例如:

    select age from user 與 select AGE from user不會匹配,因為大小寫不同;

    select age from use 與 select age from user不會匹配,因為空格不同;

    sql兩邊的空格可忽略,可以認為是對key進行過trim操作之后再進行equals比較。

    查看mysql設置參數

    執行

    show variables like '%query_cache%';

    可以看到相關參數:query_cache_type:0-不啟用查詢緩存;1-啟用,2-啟用,默認值為0;

    query_cache_size:設置緩存區總大小,允許設置query_cache_size的值最小為40K,默認1M,推薦設置為:64M/128M;

    query_cache_limit:限制緩存區最大能緩存的單條查詢記錄集大小,默認設置為1M

    query_cache_type為1時,只要符合查詢緩存的要求,客戶端的查詢語句和記錄集都可以緩存起來,如果SQL中加上 SQL_NO_CACHE將不緩存;

    query_cache_type為2時,只要SQL中添加了參數:SQL_CACHE,且符合查詢緩存的要求,客戶端的查詢語句和記錄集,則可以緩存起來。

    查看緩存使用情況

    show status like '%Qcache%%';

    可以看到相關參數:Qcache_hits:緩存命中次數;

    Qcache_inserts:緩存中插入次數,每緩存一次加1,注意這個不是緩存數量;

    開啟查詢緩存

    設置選項query_cache_type = 1 ,同時設置query_cache_size = 67108864;

    注:query_cache_size的值設置在100MB以內即可。在MySQL里查詢緩存是由一個全局鎖在控制,每次更新查詢緩存的內存塊都需要進行鎖定。

    關閉查詢緩存

    設置選項query_cache_type = 0,同時設置query_cache_size = 0。

    適用場景

    用于頻繁提交同一個語句,并且該表數據變化不是很頻繁的場景,例如一些靜態頁面,或者頁面中的某塊不經常發生變化的信息。

    由于查詢緩存需要緩存最新數據結果,因此表數據發生任何變化(insert、update、delete或其他可能產生數據變化的操作),都會導致查詢緩存被刷新。因而,對于一個更新頻率非常低而只讀查詢頻率非常高的場景下,打開查詢緩存還是比較有優勢的。

    不適用場景

    查詢緩存嚴格要求2次SQL請求要完全一樣,包括SQL語句,連接的數據庫、協議版本、字符集等因素都會影響。下面為查詢緩存不適用的幾個場景:子查詢;

    過程、函數、觸發器、event中調用的SQL,或者引用到這些結果的;

    查詢中涉及一些特殊函數時,例如:BENCHMARK()、CURDATE()、CURRENT_TIME()、CURRENT_TIMESTAMP()、NOW()、SLEEP()、CONNECTION_ID()、CURRENT_DATE()、CURRENT_USER()、PASSWORD()、RAND()、UUID()、ENCRYPT()、LAST_INSERT_ID()等等;

    查詢涉及到mysql,information_schema或performance_schema。

    類似SELECT…LOCK IN SHARE MODE、SELECT…FOR UPDATE、SELECT..INTO OUTFILE/DUMPFILE、SELECT * FROM ... WHERE autoincrement_col IS NULL的查詢;

    SELECT執行計劃用到臨時表;

    未引用任何表的查詢,例如SELECT 1+2;

    查詢產生了告警(warnings);

    SELECT語句中存在SQL_NO_CACHE關鍵字;

    涉及到分區表。更多相關免費學習推薦:mysql教程(視頻)

    總結

    以上是生活随笔為你收集整理的mysql php 缓存机制_mysql数据库查询缓存原理是什么的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。