SQL
優化的一些方法
1.在查詢過程中,盡量避免全表掃描,考慮在where
和order by
涉及的列上建立索引。
2.盡量避免在where
子句中對字段進行NULL
的判斷,建議不使用NULL
,因為在查詢的時候NULL
是不會通過索引來檢索的,他會放棄使用索引而進行全表掃描。
3.盡量避免查詢條件中使用like關鍵字,像%…%
和%...
這樣的條件是沒有辦法使用索引的。使用的是全表掃描,還有就是由于匹配算法的關系,like
的字段長度越大,模糊查詢的效率越低。并且優化空間很小。
4.不要在where
子句中使用!=
和<>
操作符。原因同上,放棄索引,使用全表掃描。可以使用or
來修改。
?6.or
有時候也會導致全表掃描,一個字段有索引,一個字段上沒有索引,在使用or
的查詢的時候也會導致全表掃描。
7.避免對字段進行表達式操作或者函數操作。
8.update
操作,如果只更改1、2個字段的話,不要修改所有字段。否則頻繁調用會引起明顯的性能消耗,同時帶來大量日志。
9.連接的使用,在使用表join
的時候,如果有分頁的話,先分頁在join
。否者邏輯上的讀寫會很高,性能很差。當然要考慮分頁前后的消息展示是否會因為join
進行缺失。可能會導致兩個操作方式顯示的結果不一致。很有可能不一致。
10.不帶任何條件的count
函數,會引起全表掃描?也就是說count(*)
與count(id)
是有區別的么?不同MySQL
的版本這個函數的性能不一樣。
11.?索引的類型(BTREE,RTREE,HASH,FULLTEXT)。索引也并不是越多越好,可能在查詢的時候很方便,但是在插入和修改操作的時候,可能會出現索引重建的情況。所以索引的使用也要看具體的情況。索引太多了需要考慮哪些不常使用的索引是否有存在的必要,或者使用別的解決方法。
12.拆分大的delete
或者insert
語句,可以使用批處理,同時這兩個操作會出現鎖表的情況。
13.盡量避免使用大的事務,控制事務的粒度。能提高系統的并發能力。
參考文章:[數據庫SQL優化大總結之 百萬級數據庫優化方案]
加上了部分自己的總結
部分比較好用的MySQL的相關操作,簡單記錄
設置終端
MySQL
的編碼。
set names"utf8";
輸出查詢結果到文件
into outfile '/tmp/a.csv'