這篇文章主要介紹了MySQL快取的查詢和清除命令使用詳解,對於一些不常改變資料且有大量相同sql查詢的表,查詢快取會顯得比較有用一些,需要的朋友可以參考下
Mysql 查詢快取
查詢快取的功能就是當查詢接收到一個和之前相同的查詢,伺服器將會從查詢快取種檢索結果,而不是再次分析和執行上次的查詢。這樣就大大提高了性能,節省時間。
1.設定查詢快取
修改設定文件,修改[mysqld]下的query_cache_size和query_cache_type(如果沒有則新增)。其中query_cache_size表示緩存的大小,而query_cache_type有3個值,表示緩存那種類 型的select結果集,query_cache_type各個值如下:
0或off關閉緩存
1或on開啟緩存,但是不保存使用sql_no_cache的select語句,如不緩存select sql_no_cache name from wei where id=2
2或demand開啟有條件緩存,只緩存帶sql_cache的select語句,快取select sql_cache name from wei where id=4 ##範例的配置為下,配置完成重啟Mysql伺服器即可。
query_cache_size=10M query_cache_type=1可以用下列指令檢視是否開啟,其中have_query_cache為是否開啟,query_cache_limit 指定單一查詢能夠使用的緩衝區大小,預設為1M;query_cache_min_res_unit為系統分配的最小快取區塊大小,預設是4KB,設定值大對大數據查詢有好處,但如果你的查詢都是小數據查詢,就容易造成記憶體碎片和浪費;query_cache_size和query_cache_type就是上面我們的配置;query_cache_wlock_invalidate表示有其他客戶端正在對MyISAM表進行寫入操作時,如果查詢在query cache中,是否回傳cache結果還是等寫操作完成再讀表取得結果。
mysql> show variables like '%query_cache%'; +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 10485760 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 6 rows in set (0.00 sec)2.測試
我們先執行一次,select count(*) from wei ;然後再執行一次,可以看出第二次用的時間遠低於第一次的執行,因為第二次從快取中讀取了select結果。
mysql> select count(*) from wei ; +----------+ | count(*) | +----------+ | 4194304 | +----------+ 1 row in set (3.92 sec) mysql> select count(*) from wei ; +----------+ | count(*) | +----------+ | 4194304 | +----------+ 1 row in set (0.00 sec)我們可以透過以下指令查看現在快取的情況
mysql> show status like 'qcache%'; +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | Qcache_free_blocks | 1 | | Qcache_free_memory | 10475424 | | Qcache_hits | 1 | | Qcache_inserts | 1 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 0 | | Qcache_queries_in_cache | 1 | | Qcache_total_blocks | 4 | +-------------------------+----------+ 8 rows in set (0.00 sec)其中各個參數的意義如下:
- Qcache_free_blocks:快取中相鄰記憶體區塊的個數。數目大說明可能有碎片。 FLUSH QUERY CACHE會對緩存中的碎片進行整理,從而得到一個空閒塊。
- Qcache_free_memory:快取中的空閒記憶體。
- Qcache_hits:每次查詢在快取中命中時就增大
- Qcache_inserts:每次插入一個查詢時就會增大。命中次數除以插入次數就是不中比。
- Qcache_lowmem_prunes:快取出現記憶體不足並且必須要進行清理以便為更多查詢提供空間的次數。這個數字最好長時間來看;如果這個 數字在不斷增長,就表示可能碎片非常嚴重,或者內存很少。 (上面的free_blocks和free_memory可以告訴您屬於哪種情況)
- Qcache_not_cached:不適合進行快取的查詢的數量,通常是由於這些查詢不是SELECT 語句或用了now( )之類的函數。
- Qcache_queries_in_cache:目前快取的查詢(和回應)的數量。
- Qcache_total_blocks:快取中區塊的數量。
清除快取
mysql的FLUSH句法(清除快取)
FLUSH flush_option [,flush_option]如果你想要清除一些MySQL使用內部緩存,你應該使用FLUSH指令。為了執行FLUSH,你必須要有reload權限。
flush_option可以是下列任何東西:
- HOSTS 這個用的最多,並且經常被接觸到。主要是用來清空主機快取表。如果你的某些主機改變IP數字,或者如果你得到錯誤訊息Host ... isblocked,你應該清空主機表。當在連接MySQL伺服器時,對一台給定的主機有多於 max_connect_errors個錯誤連續不斷地發生,MySQL為了安全的需要將會阻止該主機進一步的連線請求。清空主機表允許主機再嘗試連線。
- LOGS 關閉目前的二進位日誌檔案並建立新文件,新的二進位日誌檔案的名字會在目前的二進位檔案的編號上加1。
- PRIVILEGES 這個也是經常使用的,每當重新賦權後,為了以防萬一,讓新權限立即生效,一般都執行一把,目地是從資料庫授權表中重新裝載權限到快取中。
- TABLES 關閉所有開啟的資料表,同時此操作將會清除查詢快取中的內容。
FLUSH TABLES WITH READ LOCK 關閉所有開啟的表,同時對於所有資料庫中的表都加一個讀鎖,直到顯示地執行unlock tables,該操作常常用於資料備份的時候。
STATUS 重置大多數狀態變數到0。
MASTER 刪除所有的二進位日誌檔案中的二進位日誌文件,重置二進位日誌檔案的索引檔案為空,建立一個新的二進位日誌檔案,不過這個已經不推薦使用,改成reset master 了。可以想像,以前自己是多土啊,本來一條簡單的命令就可以搞定的,卻要好幾條命令來,以前的做法是先查出來當前的二進制日誌文件名,再用purge 操作。
QUERY CACHE 重整查詢緩存,消除其中的碎片,提高效能,但是並不影響查詢快取中現有的數據,這點和Flush table 和Reset Query Cache(將會清空查詢快取的內容)不一樣的。
SLAVE 類似於重置複製吧,讓從資料庫忘記主資料庫的複製位置,同時也會刪除已下載下來的relay log,與Master一樣,已經不建議使用,改成Reset Slave了。這個也很有用的。
一般來講,Flush作業都會記錄在二進位日誌檔案中,但是FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE、FLUSH TABLES WITH READ LOCK不會記錄,因此上述操作如果記錄在二進位日誌檔中話,會對從資料庫造成影響。注意:Reset操作其實扮演的是一個Flush操作的增強版的角色。
以上是分享MySQL快取的查詢和清除命令實例代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver CS6
視覺化網頁開發工具