摘要:的類型均為類型,前者現(xiàn)在時表示主動創(chuàng)建,后者過去分詞表示被動更新。推薦單表行數(shù)超過萬行或者單表容量超過,才推薦進(jìn)行分庫分表。超過三個表禁止。防止因字段類型不同造成的隱式轉(zhuǎn)換,導(dǎo)致索引失效。說明會統(tǒng)計(jì)值為的行,而列名不會統(tǒng)計(jì)此列為值的行。
一.編程規(guī)約
(一)命名風(fēng)格
1.目錄使用小寫+下劃線 home,view,model,admin_view
2.
類 UpperCamelCase PhpMailer
方法 lowerCamelCase getUserName
屬性 lowerCamelCase tableName
函數(shù) 小寫字母和下劃線 get_client_ip
常量 全部大寫 PASSWORD
如果模塊、接口、類、方法使用了設(shè)計(jì)模式,在命名時需體現(xiàn)出具體模式。將設(shè)計(jì)模式體現(xiàn)在名字中,有利于閱讀者快速理解架構(gòu)設(shè)計(jì)理念。
(二)代碼格式
1.
// 這是示例注釋,請注意在雙斜線之后有一個空格
2.
if else的語言結(jié)構(gòu) 只在結(jié)束的地方換行
e.g.
if (flag == 1) {
System.out.println("world");
} else {
System.out.println("ok");
}
3.一行代碼不超過120字符,超過需要使用換行
單個方法的總行數(shù)不超過 80 行。
4.代碼邏輯分清紅花和綠葉,個性和共性,綠葉邏輯多帶帶出來成為額外方法,使主干代碼 更加清晰;共性邏輯抽取成為共性方法,便于復(fù)用和維護(hù)。
(三)OOP規(guī)約
1.所有的覆寫方法,必須加@Override注解
2.任何類、方法、參數(shù)、變量,嚴(yán)控訪問范圍。過于寬泛的訪問范圍,不利于模塊解耦。
如果是一個 private 的方法,想刪除就刪除,可是一個 public 的 service
成員方法或成員變量,刪除一下,不得手心冒點(diǎn)汗嗎
3.避免出現(xiàn)重復(fù)的代碼(Don’t Repeat Yourself),即DRY原則
二.安全規(guī)約
1.用戶輸入的 SQL 參數(shù)嚴(yán)格使用參數(shù)綁定或者 METADATA 字段值限定,防止 SQL 注入,
禁止直接使用前端傳來的字符串拼接 SQL 訪問數(shù)據(jù)庫。
三.MySQL規(guī)約
(一) 建表規(guī)約
1.任何字段如果為非負(fù)數(shù),必須是 unsigned
2.表達(dá)是與否概念的字段,必須使用 is_xxx 的方式命名,數(shù)據(jù)類型是 unsigned tinyint ( 1表示是,0表示否)
3.表名不使用復(fù)數(shù)名詞,表名應(yīng)該僅僅表示表里面的實(shí)體內(nèi)容,不應(yīng)該表示實(shí)體數(shù)量
4.唯一索引名為 uk_字段名,普通索引名則為 idx_字段名。
5.小數(shù)類型為 decimal,禁止使用 float 和 double。
//說明:float 和 double 在存儲的時候,存在精度損失的問題,很可能在值的比較時,得到不 正確的結(jié)果。如果存儲的數(shù)據(jù)范圍超過 decimal 的范圍,建議將數(shù)據(jù)拆成整數(shù)和小數(shù)分開存儲
6.varchar 是可變長字符串,不預(yù)先分配存儲空間,長度不要超過 5000,如果存儲長度大于此值,定義字段類型為 text,獨(dú)立出來一張表,用主鍵來對應(yīng),避免影響其它字段索引效率。
7.禁用保留字,如 desc、range、match、delayed desc//這個很容易誤用,以后換成descb
8.表必備三字段:id, gmt_create, gmt_modified。 說明:其中id必為主鍵,類型為bigint unsigned、單表時自增、步長為1。gmt_create, gmt_modified 的類型均為 datetime 類型,前者現(xiàn)在時表示主動創(chuàng)建,后者過去分詞表示被 動更新。//here
9.【推薦】單表行數(shù)超過 500 萬行或者單表容量超過 2GB,才推薦進(jìn)行分庫分表。
(二) 索引規(guī)約
1.業(yè)務(wù)上具有唯一特性的字段,即使是組合字段,也必須建成唯一索引。 說明:不要以為唯一索引影響了 insert 速度,這個速度損耗可以忽略,但提高查找速度是明 顯的;另外,即使在應(yīng)用層做了非常完善的校驗(yàn)和控制,只要沒有唯一索引,根據(jù)墨菲定律, 必然有臟數(shù)據(jù)產(chǎn)生。
2.超過三個表禁止 join。需要 join 的字段,數(shù)據(jù)類型保持絕對一致;多表關(guān)聯(lián)查詢時,保證被關(guān)聯(lián)的字段需要有索引。
3.利用覆蓋索引來進(jìn)行查詢操作,來避免回表操作。
說明:如果一本書需要知道第 11 章是什么標(biāo)題,會翻開第 11 章對應(yīng)的那一頁嗎?
目錄瀏覽一下就好,這個目錄就是起到覆蓋索引的作用。
//這個例子舉的非常非常的好,以后用書和目錄來理解索引和數(shù)據(jù)是個非常好的方式
//extra列會出現(xiàn):using index
4.延遲關(guān)聯(lián)或者子查詢優(yōu)化超多分頁場景。
說明:MySQL 并不是跳過 offset 行,而是取 offset+N 行,然后返回放棄前 offset 行,返回 N 行,那當(dāng) offset 特別大的時候,效率就非常的低下,要么控制返回的總頁數(shù),要么縮減對要放棄的offset行的獲取成本。
正例:先快速定位需要獲取的 id 段,然后再關(guān)聯(lián):
SELECT a.* FROM 表 1 a, (select id from 表 1 where 條件 LIMIT 100000,20 ) b where a.id=b.id
5.在 varchar 字段上建立索引時,必須指定索引長度,沒必要對全字段建立索引,根據(jù)實(shí)際文本區(qū)分度決定索引長度即可。
6.SQL 性能優(yōu)化的目標(biāo):至少要達(dá)到 range 級別,要求是 ref 級別,如果可以是 consts 最好。
說明:
1)consts 單表中最多只有一個匹配行(主鍵或者唯一索引),在優(yōu)化階段即可讀取到數(shù)據(jù)。
2)ref 指的是使用普通的索引(normal index)。
3)range 對索引進(jìn)行范圍檢索。
7.防止因字段類型不同造成的隱式轉(zhuǎn)換,導(dǎo)致索引失效。
select id from qs_video_update where bid = 73836918995;
select id from qs_video_update where bid = "73836918995";//explain一下天壤之別了
(三)sql語句
1.count(*)就是 SQL92 定義 的標(biāo)準(zhǔn)統(tǒng)計(jì)行數(shù)的語法,跟數(shù)據(jù)庫無關(guān),跟 NULL 和非 NULL 無關(guān)。
說明:count(*)會統(tǒng)計(jì)值為 NULL 的行,而 count(列名)不會統(tǒng)計(jì)此列為 NULL 值的行。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28920.html
摘要:熟悉和遵守阿里巴巴開發(fā)手冊的編程風(fēng)格,那只是標(biāo),而代碼可讀性的本可以追溯到軟件設(shè)計(jì)階段。何為條設(shè)計(jì)規(guī)約是根據(jù)阿里巴巴實(shí)際項(xiàng)目架構(gòu)經(jīng)驗(yàn)提煉而成,共條。本次新增的不單是條新的設(shè)計(jì)規(guī)約,還是千萬阿里人的技術(shù)之心。 摘要:2018年6月,《阿里巴巴Java開發(fā)手冊》再次刷新代碼規(guī)范認(rèn)知,我們新增了16條設(shè)計(jì)規(guī)約!現(xiàn)免費(fèi)開放下載,不可錯過!《阿里巴巴Java開發(fā)手冊》是阿里內(nèi)部Java工程師所遵...
摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)推薦豆瓣評分書的質(zhì)量沒的說,推薦大家好好看一下。推薦,豆瓣評分,人評價本書介紹了在編程中條極具實(shí)用價值的經(jīng)驗(yàn)規(guī)則,這些經(jīng)驗(yàn)規(guī)則涵蓋了大多數(shù)開發(fā)人員每天所面臨的問題的解決方案。 很早就想把JavaGuide的書單更新一下了,昨晚加今天早上花了幾個時間對之前的書單進(jìn)行了分類和補(bǔ)充完善。雖是終極版,但一定還有很多不錯的 Java 書籍我沒有添加進(jìn)去,會繼續(xù)完善下去。希望這篇...
摘要:說明這篇文章是我第一次認(rèn)真閱讀阿里巴巴開發(fā)手冊終極版的筆記。說明本手冊明確防止是調(diào)用者的責(zé)任。一年半載后,那么單元測試幾乎處于廢棄狀態(tài)。好的單元測試能夠最大限度地規(guī)避線上故障。 說明 這篇文章是我第一次(認(rèn)真)閱讀《阿里巴巴 Java 開發(fā)手冊(終極版)》的筆記。手冊本身對規(guī)范的講解已經(jīng)非常詳細(xì)了,如果你已經(jīng)有一定的開發(fā)經(jīng)驗(yàn)并且有良好的編碼習(xí)慣和意識,會發(fā)現(xiàn)大部分規(guī)范是符合常識的。所以...
閱讀 2350·2021-11-24 11:16
閱讀 2034·2021-09-30 09:47
閱讀 2002·2021-09-10 10:51
閱讀 1322·2019-08-30 14:08
閱讀 3140·2019-08-30 13:47
閱讀 1527·2019-08-30 13:02
閱讀 3232·2019-08-29 12:29
閱讀 3192·2019-08-26 17:05