(0)可以先使用 explain 關鍵字可以讓你知道mysql是如何處理你的sql語句的。這可以幫我們分析是查詢語句或是表結構的效能瓶頸。
(1)寫sql要明確需要的字段,要多少就寫多少字段,而不是濫用 select *
(2)可以用使用連線(join)來代替子查詢
(3)使用分頁語句:limit start , count 或者條件 where子句時,有什麼可限制的條件盡量加上,查一條就limit一條。做到不濫用。比如說我之前做過的的p2p專案,只是需要知道有沒有乙個滿標的借款,這樣的話就可以用上 limit 1,這樣mysql在找到一條資料後就停止搜尋,而不是全文搜尋完再停止。
(4)開啟查詢快取:
大多數的mysql伺服器都開啟了查詢快取。這是提高查詢有效的方法之一。當有很多相同的查詢被執行了多次的時候,這些查詢結果會被放到乙個快取中,這樣,後續的相同的查詢就不用操作表而直接訪問快取結果了。
查詢快取工作流程:
a):伺服器接收sql,以sql+db+query_cache_query_flags作為hash查詢鍵;
c):如果沒有找到快取則執行許可權驗證、sql解析、sql優化等一些列的操作;
d):執行完sql之後,將結果集儲存到快取
當然,並不是每種情況都適合使用快取,衡量開啟快取是否對系統有效能提公升是乙個整體的概念。那怎麼判斷要不要開啟快取呢,如下:
1)通過快取命中率判斷, 快取命中率 = 快取命中次數 (qcache_hits) / 查詢次數 (com_select)、
2)通過快取寫入率, 寫入率 = 快取寫入次數 (qcache_inserts) / 查詢次數 (qcache_inserts)
3)通過 命中-寫入率 判斷, 比率 = 命中次數 (qcache_hits) / 寫入次數 (qcache_inserts), 高效能mysql中稱之為比較能反映效能提公升的指數,一般來說達到3:1則算是查詢快取有效,而最好能夠達到10:1
與快取相關的主要引數如下表所示。可以使用命令show variables like '%query_cache%'檢視
快取資料失效時機
在表的結構或資料發生改變時,查詢快取中的資料不再有效。有這些insert、update、 delete、truncate、alter table、drop table或drop database會導致快取資料失效。所以查詢快取適合有大量相同查詢的應用,不適合有大量資料更新的應用。
可以使用下面三個sql來清理查詢快取:
1、flush query cache; // 清理查詢快取記憶體碎片。
2、reset query cache; // 從查詢快取中移出所有查詢。
3、flush tables; //關閉所有開啟的表,同時該操作將會清空查詢快取中的內容。
innodb與查詢快取:
innodb會對每個表設定乙個事務計數器,裡面儲存當前最大的事務id.當乙個事務提交時,innodb會使用mvcc中系統事務id最大的事務id跟新當前表的計數器.
只有比這個最大id大的事務能使用查詢快取,其他比這個id小的事務則不能使用查詢快取.
另外,在innodb中,所有有加鎖操作的事務都不使用任何查詢快取
喜歡的小夥伴,點個關注吧,每天分享新的內容!
很雜的一些小總結
前前後後研究了有小半月,總算從零基礎,有了一些感想。不過今天的主題不是這個。前段時間的進度是,成功實現,依據班級資訊,學期資訊,從青果上將課程表頁面 爬下來,並用正規表示式實現了所需 提取。而今天,要做的事情是將提取的資料,存入到mysql中。這中間出現了挺多問題的,所以打算記錄一下。mysql也是...
Regx的一些小總結
一 校驗數字的表示式 1 數字 0 9 2 n位的數字 d 3 至少n位的數字 d 4 m n位的數字 d 5 零和非零開頭的數字 0 1 9 0 9 6 非零開頭的最多帶兩位小數的數字 1 9 0 9 0 9 7 帶1 2位小數的正數或負數 d d 8 正數 負數 和小數 d d 9 有兩位小數的...
筆試的一些小總結
1.二叉樹節點的度,就是說他有幾個子節點,可以是0,1,2。2.mysql assoc沒實現?等會再看 3.正規表示式.常見的一些元字元 表示開始 表示結束 表示前面出現0次或多次 表示前面出現一次或多次 表示前面出現0次或1次 4.linux命令,刪除乙個非空子目錄rm rf tmp 5.php中...