標籤:依賴 全表掃描 info 詳解 width 規範 出現 rand 使用
1、為查詢快取最佳化查詢
大多數的MySQL伺服器都開啟了查詢快取,這是提高效能最有效方法之一,而且這是被MySQL的資料庫引擎處理的。
有些查詢不會使用緩衝,比如有curdate(),now(),Rand()或是其他的諸如此類的sql函數都不會開啟查詢快取,因為這些函數
的返回是不定的異變的,無法進行緩衝,可以用變數代替MySQL函數,通過傳參開啟緩衝。
2、EXPLAIN 查詢語句
使用Explain關鍵字可以分析MySQL是如何處理sql語句的,可以協助自己分析自己的查詢語句或者表結構的效能瓶頸。
EXPLAIN命令分析詳解:參考
https://www.cnblogs.com/gomysql/p/3720123.html
主要關注的列:id,select_type,type,rows,Extra
ID 包含一組數字,查看查詢中執行select子句或動作表的順序,查看優先順序關係
select_type 查看每一個select子句的類型(是簡單還是複雜)避免出現DEPENDENT SUBQUERY
子查詢效率依賴外層查詢
type 查看查詢在表中找到所需行的方式,盡量避免全表掃描,使用索引或外部索引鍵關聯
rows查看select語句得到結果需要讀取的行數,根據行數進行最佳化
Extra查看一些額外的資訊,如不使用索引排序
3、當只要一行資料時使用Limit 1
當你查詢表的有些時候,如果知道查詢結果只會有一條,可以加上limit 1,當MySQL資料庫引擎找到一條資料
後就會停止搜尋,而不是繼續往後尋找下一條符合記錄的資料
4、為搜尋欄位建立索引
索引並不一定就是給主鍵或是唯一的欄位。對錶中經常搜尋的欄位建立索引。
5、在join表的時候使用相當的類型,並將其索引。如通過外部索引鍵關聯,或在兩張表中儲存相同的欄位資料。
6、避免select *
從資料庫裡讀的資料越多,查詢就會變得很慢,並且如果資料庫伺服器和web伺服器是兩台獨立的伺服器的話,
還會增加網路傳輸的負載。用欄位名代替 * 。
7、反正常化設計,表的水平分割(以某一個條件列作為分割條件,如年份)
垂直分割(將一個表的列分到不同的表中)
表的合并
列的反正常化(通過列的複製完成,消除表間的多次串連)
8、拆分大的delete或者insert語句
這兩個操作都會造成鎖表,表如果鎖住了其他動作就都進不來了。如果訪問量很大,30秒的鎖表有可能會讓web服務崩潰。
如果有很大的處理,需要將其拆分,使用limit將其進行劃分。
MySQL效能最佳化