mysql查詢語句優化sql優化 隨時更新

2021-09-11 02:56:45 字數 1822 閱讀 9296

一.規範寫法(摘自阿里巴巴開發手冊)

【強制】不要使用 count(列名)或 count(常量)來替代 count(),count()是 sql92 定義的

標準統計行數的語法,跟資料庫無關,跟 null 和非 null 無關。

說明:count(*)會統計值為 null 的行,而 count(列名)不會統計此列為 null 值的行。

【強制】count(distinct col) 計算該列除 null 之外的不重複行數,注意 count(distinct

col1, col2) 如果其中一列全為 null,那麼即使另一列有不同的值,也返回為 0。

【強制】當某一列的值全是 null 時,count(col)的返回結果為 0,但 sum(col)的返回結果為

null,因此使用 sum()時需注意 npe 問題。

正例:可以使用如下方式來避免 sum 的 npe 問題:select if(isnull(sum(g)),0,sum(g))

from table;

【強制】使用 isnull()來判斷是否為 null 值。

說明:null 與任何值的直接比較都為 null。

1) null<>null 的返回結果是 null,而不是 false。

2) null=null 的返回結果是 null,而不是 true。

3) null<>1 的返回結果是 null,而不是 true。

【強制】在**中寫分頁查詢邏輯時,若 count 為 0 應直接返回,避免執行後面的分頁語句。

【強制】不得使用外來鍵與級聯,一切外來鍵概念必須在應用層解決。

說明:以學生和成績的關係為例,學生表中的 student_id是主鍵,那麼成績表中的 student_id

則為外來鍵。如果更新學生表中的 student_id,同時觸發成績表中的 student_id 更新,即為

級聯更新。外來鍵與級聯更新適用於單機低併發,不適合分布式、高併發集群;級聯更新是強阻

塞,存在資料庫更新風暴的風險;外來鍵影響資料庫的插入速度。

【強制】禁止使用儲存過程,儲存過程難以除錯和擴充套件,更沒有移植性。

【強制】資料訂正時,刪除和修改記錄時,要先 select,避免出現誤刪除,確認無誤才能執

行更新語句。

【推薦】in 操作能避免則避免,若實在避免不了,需要仔細評估 in 後邊的集合元素數量,控

制在 1000 個之內。

【參考】如果有全球化需要,所有的字元儲存與表示,均以 utf-8 編碼,注意字元統計函式

的區別。

說明:select length(「輕鬆工作」); 返回為 12

select character_length(「輕鬆工作」); 返回為 4

如果需要儲存表情,那麼選擇 utfmb4 來進行儲存,注意它與 utf-8 編碼的區別。

【參考】truncate table 比 delete 速度快,且使用的系統和事務日誌資源少,但 truncate

無事務且不觸發 trigger,有可能造成事故,故不建議在開發**中使用此語句。

說明:truncate table 在功能上與不帶 where 子句的 delete 語句相同。

二.影響效率的寫法

1.避免子查詢

2.where判斷null影響效率

3.like進行模糊查詢的時候前指標不要模糊搜尋,利用後指標進行模糊匹配

4.將複雜的查詢分解成幾個sql語句

5.正確的使用索引

6.規範sql語句的寫法,全部大寫,書寫工整,用什麼資料取什麼字段

7.正確使用in語句(小於1000個字元)

8.學會用explain進行分析

SQL查詢語句優化

sql查詢語句優化的使用方法 查詢語句的優化是sql效率優化的乙個方式,可以通過優化sql語句來盡量使用已有的索引,避免全表掃瞄,從而提高查詢效率。最近在對專案中的一些sql進行優化,總結整理了一些方法。1 在表中建立索引,優先考慮where group by使用到的字段。2 盡量避免使用selec...

Mysql常用SQL查詢語句優化方法

當系統的吞吐量變大後,資料讀寫速度會變得原來越慢,因此要想辦法對sql語句進行優化。避免引擎放棄使用索引而進行全表掃瞄 1 對查詢進行優化,首先應考慮在 where 及 order by 涉及的列上建立索引 2 應盡量避免在 where 子句中使用 或 操作符 3 應盡量避免在 where 子句中對...

php mysql查詢優化 MySQL查詢優化

在我們使用mysql資料庫時,比較常用也是查詢,包括基本查詢,關聯查詢,條件查詢等等,對於同乙個操作,sql語句的實現有很多種寫法,但是不同的寫法查詢的效能可能會有很大的差異。這裡主要介紹下select查詢優化的要點。1.使用慢查詢日誌去發現慢查詢。2.使用執行計畫去判斷查詢是否正常執行。3.總是去...