1. 程式人生 > >閱讀阿裏文檔總結————Mysql數據庫篇

閱讀阿裏文檔總結————Mysql數據庫篇

導致 ted 重要 sele 語法 sel 問題: sql tin

一:建表規範

1.針對於任何字段如果為非負數,必須是 unsigned;

2.表達邏輯刪除的字段名 is_deleted,1 表示刪除,0 表示未刪除; (1為是;0為否)

3.主鍵索引名為 pk_字段名;唯一索引名為 uk_字段名;普通索引名則為 idx_字段名;

4.小數類型為 decimal,禁止使用 float 和 double;

5.如果存儲的字符串長度幾乎相等,使用 char 定長字符串類型

6.表必備三字段:id, gmt_create, gmt_modified

7.合適的字符存儲長度,不但節約數據庫表空間、節約索引存儲,更重要的是提升檢 索速度;

8.利用覆蓋索引來進行查詢操作,避免回表;

9.建組合索引的時候,區分度最高的在最左邊;

10.防止因字段類型不同造成的隱式轉換,導致索引失效。

二:SQL語句

1.不要使用 count(列名)或 count(常量)來替代 count(*),count(*)是 SQL92 定義的 標準統計行數的語法,跟數據庫無關,跟 NULL 和非 NULL 無關

 解釋:count(*)會統計值為 NULL 的行,而 count(列名)不會統計此列為 NULL 值的行

2.count(distinct col) 計算該列除 NULL 之外的不重復行數,註意 count(distinct col1, col2) 如果其中一列全為 NULL,那麽即使另一列有不同的值,也返回為 0

3.當某一列的值全是 NULL 時,count(col)的返回結果為 0,但 sum(col)的返回結果為 NULL,因此使用 sum()時需註意 NPE 問題

可以使用如下方式來避免 sum 的 NPE 問題:SELECT IF(ISNULL(SUM(g)),0,SUM(g)) FROM table

閱讀阿裏文檔總結————Mysql數據庫篇