(1)
針對innodb表,盡量不執行selectcount(*)語句,因為innodb表沒有類似myisam那樣的內部計數器來記錄表記錄總量,執行這個操作將會全表掃瞄,速度很慢.
(2)盡量使用myisam表,除非必須使用其他型別,因為myisam型別的總體讀寫效率是相當高的,缺點是表級鎖,而不是行/頁級鎖.
(3)善用explain來幫助你分析查詢優化情況
(4)如果需要對乙個較大的且併發讀寫較多的資料表做groupby等統計操作,建議使用摘要表來儲存統計資訊,定期更新統計表,這可能獲得很大的效能改善.
(5)查詢時如果有orderby分句的話,注意讓它的字段順序和索引字段順序對應,這樣能加快排序速度
(6)如果有乙個多字段索引,則查詢時,必須按照索引順序來使用,否則該索引不會用到.例如:
索引`idx_`(col1,col2,col3),那麼查詢select....from...wherecol1=1andcol2=2;使用索引,而查詢...wherecol2=2andcol3=3;或...wherecol1=1andcol3=3;則不使用索引.
where中的條件如果有恒量型別的(如`field`=1),就盡量放在前面,這樣能更快的執行過濾.
(7)2個表連線時,連線欄位的型別最好一致(包括字段長度),這樣的話索引速度快多了.
(8)大部分情況下,字元型別的字段索引值需要一部分,例如createindexchar_idxontbl1(name(10));
(9)盡量使用最合適的資料型別,能使用enum就不使用tinyint,能使用smallint就不使用mediumint.這樣能節省儲存空間,增加資料儲存量,提高搜尋速度.不要擔心這樣會對省級產生很大的影響,因為加入從tinyint型別改變為int的話,並不會改變原來的資料.
(10)
如果知道某個表總是頻繁使用的話,可以把它放到hot_cache中,用以下方法:
setglobalhot_cache.key_buffer_size=128*1024;
cacheindex`***`inhot_cache;
(11)
把拖沓複雜,速度慢的的查詢分解成多個簡潔明瞭的查詢,這樣儘管查詢次數多了,但是總體速度和效率卻可能反而更高了,而且也減少了鎖表的可能.
(12)
執行查詢時,盡量不使用外部函式,因為這樣的話就無法使用可能存在的索引,並且無論如何都會極大地降低效率.如:...where`create_time`>unix_timestamp(now());這樣的查詢.可以在程式中把當前的時間取得,然後直接執行構造好了的sql語句.
(13)
在索引欄位上使用like查詢時,左邊不要使用'%'修飾符,這樣就可以利用索引,否則無法使用索引.如...`name`like'yejr%';.
(15)
如果有可能,多使用儲存過程,這大概能獲得22%的效能提高.
(16)
如果併發訪問量相對最大連線數小多了的話,最好使用永久連線,這樣能節省不少連線時的系統資源損耗.
(17)
定期的在myisam表上執行optimizetable,這能整理隨便,提高索引效率.
(18)
如果你主要按col1,col2,...順序檢索記錄,請在對錶大量更改後執行altertable...orderbycol1,col2,...語句,這可以獲得更好的效能.
(19)
對於頻繁更改的myisam表,應盡量避免更新所有變長字段(varchar、blob和text).
(20)
對於記錄總數超過500萬的單錶,就應該趕緊考慮分表了.分表策略有多種,比如按id號段,或者按時間切分,等等.
(21)
建立資料表時盡量指定字段不能為null,並且有預設值.
(22)
使用loaddata,而不是使用大批量的insert語句來匯入資料,即使用insert的話,可以同時insert多條資料,提高效率
(23)
使資料表名和欄位名盡可能的短,例如在user表中使用欄位名name,而不是user_name.
(24)
用delay_key_write=1選項讓myisam更快地更新索引,因為在表關閉之前它們不重新整理到硬碟上.缺點是如果伺服器如果突然被殺掉了,重啟之後就必須執行myisamchk修復索引才行.
(25)
採用複製機制來分攤讀資料的負載,把寫資料只放在主伺服器上,把讀平均分攤到各個從伺服器上,能大大提高系統負載.
(26)
如果是批量匯入資料到db裡,可以考慮先關閉索引,等匯入後,再加上索引,已提高效率
優化記憶體的一些小細節
摘自 1.迴圈中物件占用記憶體大 這個問題常見於迴圈次數較大,迴圈體生成的物件占用記憶體較大的情景。例子 我需要10000個演員來打仗 1 2 3 4 for int i 0 i 10000 i 該迴圈內產生大量的臨時物件,直至迴圈結束才釋放,可能導致記憶體洩漏,解決方法和上文中提到的自動釋放池常見...
React Redux使用的一些小優化
之前畫了一張redux的流程圖,可以看看右下角的部分,可以看出來怎麼進行優化。也就是能不改變就不改變。比如不要做下面這種無謂的事情 function reducer state,action 這個 雖然在selector中,也可以通過arestatepropsequal來判斷計算後的state是否發...
mysql一些小例子
在群裡遇到有人問了個問題 其表結構如下 img 他想要用sql 如何更新 站號 列各出現的次數到 頻次 列。注 站號對應 name,頻次對應 no 最後用游標實現了他想的功能 create procedure pro hzcount begin declare cur no,y int declar...