一.規範寫法(摘自阿里巴巴開發手冊)
【強制】不要使用 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.總是去...