一些MySQL使用時遵循的規範(初版)

2021-09-11 12:28:46 字數 1306 閱讀 5108

首發於fxm5547的部落格

在model中讀資料庫也可以使用getreadconnection方法,寫使用getwriteconnection方法。$usergoodsshelf = new usergoodsshelf();$usergoodsshelf->getreadconnection()->execute("select * from ecs_user_baby limit 1 ");

參考:

1、最左字首匹配原則,非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。

2、=和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優化器會幫你優化成索引可以識別的形式

3、盡量選擇區分度高的列作為索引,區分度的公式是count(distinct col)/count(*),表示欄位不重複的比例,比例越大我們掃瞄的記錄數越少,唯一鍵的區分度是1,而一些狀態、性別字段可能在大資料面前區分度就是0,那可能有人會問,這個比例有什麼經驗值嗎?使用場景不同,這個值也很難確定,一般需要join的字段我們都要求是0.1以上,即平均1條掃瞄10條記錄

4、索引列不能參與計算,保持列「乾淨」,比如from_unixtime(create_time) = 』2014-05-29』就不能使用到索引,原因很簡單,b+樹中存的都是資料表中的字段值,但進行檢索時,需要把所有元素都應用函式才能比較,顯然成本太大。所以語句應該寫成create_time = unix_timestamp(』2014-05-29』);

5、盡量的擴充套件索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可

0、先執行看看是否真的很慢,注意設定sql_no_cache

1、where條件單錶查,鎖定最小返回記錄表。這句話的意思是把查詢語句的where都應用到表中返回的記錄數最小的表開始查起,單錶每個字段分別查詢,看哪個欄位的區分度最高

2、explain檢視執行計畫,是否與1預期一致(從鎖定記錄較少的表開始查詢)

3、order by limit 形式的sql語句讓排序的表優先查

mysql 5.6.4版本起innodb已經支援全文索引,簡單例項:

是否使用資料庫全文索引視情況而定,資料量大應該使用elasticsearch

mysql一些規範

一.規範 1命名規範 使用小寫字母 下劃線分割 名字要和意義相關 欄位名最好不要超過32個字元,不能使用保留字 萬一使用 在sql語句中要用單引號把他包住 查詢關鍵字 4欄位設計規範 優先選擇符合儲存需求的最小資料型別 a.盡量把字串轉為數字型別儲存 如利用mysql函式inet aton把字串型別...

php遵循的一些標準

psr 0 每乙個完整的命名空間都需要有以下結構 vendor namespace classname 每個命名空間需要有乙個頂級的命名空間 vendor 每個命名空間的分隔符轉換為directory separator 當載入檔案的時候 每個 字元 在類中都會轉化為directory separa...

mysql 資料庫使用的一些規範

通常來講,各個網際網路公司的資料庫分為5個資料庫環境 這些環境的機器,一定要做到許可權劃分明確,讀寫帳號分離,並且有辨識度,能區分具體業務。例如使用者名稱w wap,r wap 能看出來,讀寫帳號是wap應用的 開發規範本身也包含幾部分 基本命名和約束規範,字段設計規範,索引規範,使用規範等 規範存...