你的sql該優化了

2021-10-04 10:34:06 字數 1807 閱讀 9044

其他文章:

資料庫基礎知識.

sql——基礎語句練習.

1.查詢sql盡量不要使用select * ,而是select具體字段

2.如果知道查詢結果只有一條,或者只要最大/最小一條記錄,建議用limit 1

3.盡量避免在where子句中使用or來連線條件

​ 對於or+沒有索引的age這種情況,加上它走了userid的索引,但是走到age查詢條件時,還需要全表掃瞄,即三步:全表掃瞄+索引掃瞄+合併。

​ 如果它一開始就走全表掃瞄,直接掃一遍就完事

​ mysql是有優化器的,處於效率與成本考慮,遇到or條件,索引可能失效

4.優化limit分頁

我們日常做分頁需求的時候,一般會使用limit實現,當偏移量特別大的時候,查詢效率會變低

5.優化like語句

like可能導致索引失效

6.使用where條件限定要查詢的資料,避免返回多餘的行

當查詢某個使用者是否為會員

7.盡量避免在索引列上使用mysql的內建函式

查詢最近七天內登陸過的使用者(假設logintime 加了索引)

8.盡量避免在where子句中對字段進行表示式操作,會導致系統放棄使用索引而進行全表掃瞄

9.inner join、left join、right join,優先使用inner join,如果是left join,左邊表結果盡量少

都滿足sql需求的前提下,推薦優先使用inner join(內連線),如果使用left join,左邊表資料結果盡量小,有條件的盡量放到左邊處理

10.盡量避免在where子句中使用!=或<>操作符,否則引擎將放棄使用索引而進行全表掃瞄

11.使用聯合索引時,需要注意索引列的順序,一般最新最左匹配原則

表結構:(有乙個聯合索引idx_userid_age,userid在前,age在後)

12.對查詢進行優化,考慮在where即order by涉及的列上建立索引,盡量避免全表掃瞄

13.如果插入資料過多,考慮批量插入

14.適當的時候,使用覆蓋索引

覆蓋索引能夠使你的sql語句不需要回表,僅僅訪問索引就能得到所有的資料,提高了查詢效率

15.慎用distinct關鍵字

distinct關鍵字一般用來過濾重覆記錄,以返回不重複的記錄。在查詢乙個字段或者很少欄位的情況下使用時,會給查詢帶來優化效果,但是在字段很多的時候使用會大大降低查詢效率

16.刪除冗餘和重複索引

17.如果資料量大,建議優化修改/刪除語句

避免同時修改或刪除過多資料,因為會造成cpu利用率過高,從而影響別人對於資料庫的訪問

18.where子句中考慮使用預設值代替null

19.不要有超過五個以上的表連線

20.exist & in的合理使用

假設表a表示某企業的員工表,表b表示部門表,查詢所有部門的所有員工:

21.盡量用union all 替換union

22.索引不宜過多

23.盡量使用數字型字段,若只含數值資訊的字段盡量不要設計為字元型

24.索引不適合建在有大量重複資料的字段上

25.盡量避免向客戶端返回過多資料量

26.盡可能使用varchar/nvarchar 代替 char/nchar。

27.為了提高group by 語句的效率,可以在執行到該語句前,把不需要的記錄過濾掉。

28.欄位型別是字串,where時一定用引號括起來,否則索引失效

29.使用explain 分析你sql的計畫

sql怎麼優化,求求你別再問我sql優化了

一般面試會問你,sql怎麼優化,這時候應該回答,主要就是避免全表掃瞄,一般寫sql的時候先通過explain命令對將要執行的sql語句進行分析一下,看看sql查詢有沒有走索引,有沒有全表掃瞄,如果沒有,先看看是否對對應的字段建立了索引,如果沒有則建立合適的索引,如果建立了還是全表掃瞄那就就對sql語...

ES 優化了store欄位的合併

在lucene4的時候進行段合併的時候,我們解壓所有字段,然後再把他們壓縮到新段中,雖然lz4壓縮演算法很快,但是也會耗費大量的cpu。現在lucene5已經不再這麼做了,而是直接拷貝這些已經被壓縮的資料。拷貝也有個問題,就是段的最後一塊總是不完整的,如果,雖然這一塊很小 小於16k 但是日積月累的...

職場中的你,開始退化了嗎?

談到退化,先要說說我們生理特徵上的 達爾文結節 它是人耳輪後上部內緣的乙個稍微肥厚的結節小突出。達爾文發現,這是人類進化過程殘留的痕跡器官之一。回到職場上,經過那麼多年的摸爬滾打 千錘百鍊,你某些方面的能力得到了 進化 但同樣也有很多能力在不知不覺地退化,其中還有很多是很重要的能力,比如創新能力 學...