Mysql——SQL優化

下面主要講一下常用的sql大局上的優化技巧,對於底層不做過多解釋。

 

1.儘量走索引,如果可以的話,可以嘗試聯合索引,但是索引不易過多,因爲這樣mysql維護索引的成本會增加,寫入,刪除會變慢。

2.表的主鍵儘量是遞增的整數,這樣的話對於索引而言是有益的,索引文件會相對小,讀取會相對快一點

3.利用冗餘數據的方式,例如想要查看一個訂單的下單用戶名,那麼t_order裏面一般都會有user_id,那麼再根據user_id去t_user表查user_name即可,但是這樣就會多一次查詢,因此可以考慮把user_name也存到t_order表當中,但是這樣的話就會增加t_order表的存儲空間(簡單的以空間換時間的方式),這個問題還是不算什麼,最主要的是一旦用戶更改了用戶名,那是不是就需要同步訂單裏的user_name喃?這個其實就可以根據實際業務去考慮了,更不更新都可以接受。

4.mysql是列式存儲,因此建議表的字段不易過多,並且如果有不常用且文本過長的字段,那麼建議通過外鍵(不是真正的外鍵哈)來實現,提高讀取效率。

5.利用好mysql的limit 1這個方式,例如selectById那麼找到一條就不會讀了。

6.對於行鎖的優化,儘量讓行鎖的持有時間最小化,那麼我舉例:買東西打賬,只考慮單機

分爲了以下的步驟

)1.給買家扣錢 update a set money = money - xx

)2.給賣家加錢 update a set money = money + xx

那麼就是兩條語句,但是順序尤爲重要,首先考慮順序是 2 ,1

那麼一個買家在未完成1之前,其他所有買家都會卡在2這個步驟上,那麼大部分時間是都在阻塞,這是不合適的,

如果順序是1,2的話,那麼大家就都會各自完成自己的1,等一個買家完成2並提交之後,其他買家也能快速完成2,然後提交,這樣極大程度減少了行鎖的佔有時間。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章