1)只緩存SELECT語句。SHOW命令和存儲程序不會被緩存。
2)不能緩存預編譯語句(prepared statement)和游標。查詢緩存中保存的是查詢語句和結果集,而預編譯語句中存在替代符和額外的參數,游標從塊中讀取結果,因此上述兩種情況不能被緩存。
3)查詢語句不能包含動態內容。多次執行某SQL,必須能夠返回相同的結果集,因此查詢中不能包含像UUID(), RAND(), CONNECTION_ID()這樣的函數。
4)SQL中包含定義函數和自定義變數不會被緩存。
Mysql> set @id=1;
Mysql> select * from test where id=@id 像這種語句也不會緩存
5)對系統表的查詢不會被緩存。
Mysql> select * from mysql.user where user=』root』
6)非自動提交(顯示使用BEGIN…END)事務中的SQL不會被緩存。
7)使用TEMPORARY表的SQL不會被緩存。
8)不使用任何錶的SQL不會被緩存。
Mysql> select @id;
9)在下面的SELECT操作也不會被緩存:
SELECT ...IN SHARE MODE
SELECT ...FOR UPDATE
SELECT ...INTO OUTFILE ...
SELECT ...INTO DUMPFILE ...
SELECT * FROM ...WHERE autoincrement_col IS NULL
2. mysql查詢時怎麼不用緩存
設置好查詢緩存的大小就行了。比如設置個20MB.
SET GLOBAL QUERY_CACHE_SIZE=20000000;
mysql會將查詢SQL和結果集存到緩存中,等下次遇到相同的SQL語句時,結果集從緩存中讀取。
不設置就不用緩存了
3. mysql 緩存數據存到內存里還是緩存文件里
mysql緩存數據,一般都是放在內存的,因為速度快管理方便。硬碟在高速的請求下,IO會成為瓶頸。
但如果涉及大操作復雜操作,要查詢+排序+索引的話,會先生成一個臨時文件在硬碟,完成後自動刪除。
4. mysql 一級緩存和二級緩存的區別
一、Session緩存(又稱作事務緩存):Hibernate內置的,不能卸除。
緩存范圍:緩存只能被當前Session對象訪問。緩存的生命周期依賴於Session的生命周期,當Session被關閉後,緩存也就結束生命周期。
Hibernate一些與一級緩存相關的操作(時間點):
數據放入緩存:
1. save()。當session對象調用save()方法保存一個對象後,該對象會被放入到session的緩存中。
2. get()和load()。當session對象調用get()或load()方法從資料庫取出一個對象後,該對象也會被放入到session的緩存中。
3. 使用HQL和QBC等從資料庫中查詢數據。
二、SessionFactory緩存(又稱作應用緩存):使用第三方插件,可插拔。
5. MySql緩存問題。
我們都知道 MySQL 的 Table Cache 是表定義的緩存,江湖上流傳著各種對這個參數的調優方法。
table cache 的作用,就是節約讀取表結構文件的開銷。對於table cache 是否命中,其實table cache 是針對於線程的,每個線程有自己的緩存,只緩存本線程的表結構定義。不過我們發現,strace 中沒有關於表結構文件的 open 操作(只有 stat 操作,定位表結構文件是否存在),也就是說 table cache 不命中,不一定需要讀取表結構文件。這種感覺好像是:在不命中 table cache 時,命中了另外一個表結構緩存。
運維建議:
我們讀一下 MySQL 的文檔,關於 table_open_cache 的建議值公式:建議值 = 最大並發數 * join 語句涉及的表的最大個數。
通過實驗我們容易理解:table_cache 是針對於線程的,所以需要最大並發數個緩存。另外,一個語句 join 涉及的表,需要同時在緩存中存在。所以最小的緩存大小,等於語句 join 涉及的表的最大個數。將這兩個數相乘,就得到了 MySQL 的建議值公式。
6. 使用mysql怎麼進行處理緩存的
如果資料庫是安裝在你機器上的 那麼你可以暫時把MYSQL關閉 然後進入安裝目錄 找到data文件夾 這裡面就是放置資料庫文件的。。你會看到data裡面每一個文件夾都對應你一個資料庫名稱 把他們刪除就好了 就徹底沒了 不過可別把mysql這個文件夾刪了 還有別的文件 比如.err別亂刪哦。
如果這個你不會 或者說文件在使用刪除不了 那麼你就用mysql的可視化工具 比如mysql-front 5.1 進去刪除 效果都是一樣。
7. mysql 有自己的緩存機制 ,為什麼還要用redis和memcache緩存mysql數據
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現的結果說Status是OK,則不用修復,如果有Error,可以用:
repair table tabTest;
進行修復,修復之後可以在用check table命令來進行檢查。在新版本的phpMyAdmin裡面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為預設的數據表類型,這里以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:
myisamchk tablename.MYI
進行檢測,如果需要修復的話,可以使用:
myisamchk -of tablename.MYI
關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local裡面啟動MySQL伺服器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL資料庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的rc.local裡面,必須確認在執行這條指令時MySQL伺服器必須沒有啟動!檢測修復所有資料庫(表)
8. 如何增加mysql數據的最大緩存大小
my.ini文件中
[wampmysqld]
port =3306
socket =/tmp/mysql.sock
key_buffer_size=16M//改這里
max_allowed_packet=1M
sort_buffer_size=512K
net_buffer_length=8K
read_buffer_size=256K
read_rnd_buffer_size=512K
myisam_sort_buffer_size=8M
PS 如果是安裝版的mysql 你需要改的MY.ini 可能是在
C:ProgramDataMySQLMySQLServer5.7
這個目錄有可能是隱藏的目錄,你可以設置文件夾屬性,顯示所有文件