歪枣网Mysql优化总结
SQL優化
創建索引可以大大提高系統的性能。
第一,通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
也許會有人要問:增加索引有如此多的優點,為什么不對表中的每一個列創建一個索引呢?因為,增加索引也有許多不利的方面。
第一,創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。
第二,索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度
索引是建立在數據庫表中的某些列的上面。在創建索引的時候,應該考慮在哪些列上可以創建索引,在哪些列上不能創建索引。一般來說,應該在這些列上創建索引:在經常需要搜索的列上,可以加快搜索的速度;在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的;在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。
數據庫和表的字符集統一使用 UTF8
禁止在數據庫中存儲圖片,文件等大的二進制數據
通常文件很大,會短時間內造成數據量快速增長,數據庫進行數據庫讀取時,通常會進行大量的隨機 IO 操作,文件很大時,IO 操作很耗時。
通常存儲于文件服務器,數據庫只存儲文件地址信息
數據庫字段設計規范
1、優先選擇符合存儲需要的最小的數據類型,比如對于非負型的數據 (如自增 ID,整型 IP) 來說,要優先使用無符號整型來存儲
2、盡可能把所有列定義為 NOT NULL
索引 NULL 列需要額外的空間來保存,所以要占用更多的空間
進行比較和計算時要對 NULL 值做特別的處理
數據庫 SQL 開發規范
充分利用表上已經存在的索引
避免使用雙%號的查詢條件。如:a like ‘%123%’,(如果無前置%,只有后置%,是可以用到列上的索引的)
在定義聯合索引時,如果 a 列要用到范圍查找的話,就要把 a 列放到聯合索引的右側,使用 left join 或 not exists 來優化 not in 操作,因為 not in 也通常會使用索引失效禁止使用 SELECT * 必須使用 SELECT <字段列表> 查詢
在where子句中使用 IS NULL 或 IS NOT NULL 判斷,索引將被放棄使用,會進行全表查詢。
WHERE 從句中禁止對列進行函數轉換和計算
減少同數據庫的交互次數
避免使用子查詢,可以把子查詢優化為 join 操作
通常子查詢在 in 子句中,且子查詢中為簡單 SQL(不包含 union、group by、order by、limit 從句) 時,才可以把子查詢轉化為關聯查詢進行優化。
子查詢性能差的原因:
子查詢的結果集無法使用索引,通常子查詢的結果集會被存儲到臨時表中,不論是內存臨時表還是磁盤臨時表都不會存在索引,所以查詢性能會受到一定的影響。特別是對于返回結果集比較大的子查詢,其對查詢性能的影響也就越大。
由于子查詢會產生大量的臨時表也沒有索引,所以會消耗過多的 CPU 和 IO 資源,產生大量的慢查詢。
拆分復雜的大 SQL 為多個小 SQL
大 SQL 邏輯上比較復雜,需要占用大量 CPU 進行計算的 SQL
MySQL 中,一個 SQL 只能使用一個 CPU 進行計算
SQL 拆分后可以通過并行執行來提高處理效率
慢查詢
1、查詢當前慢查詢日志的狀態
show variables like “%slow_query_log%”;
set global slow_query_log=on;
2、修改mysql配置文件保證永久生效
由于慢查詢日志記錄的信息比較多,會影響mysql的性能,所以生產環境不建議長期開啟
vim /etc/my.cnf
slow_query_log=1
slow_query_log_file=/usr/local/mysql/data/slow-query.log
3、# 其他可用的配置參數
long_query_time=1# 慢查詢日志的時間定義(秒),默認為10秒,多久就算慢查詢的日志
log_queries_not_using_indexes=1 # 將所有沒有使用帶索引的查詢語句全部寫到慢查詢日志中
有興趣的可以訪問歪棗網,學習交流,網站:www.waizaowang.com
總結
以上是生活随笔為你收集整理的歪枣网Mysql优化总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC5+EF6+Eas
- 下一篇: DBD::mysql::db do fa