阿里Java規(guī)范-05-MySQL數(shù)據(jù)庫(kù)

=================(一)建表規(guī)約==================
根據(jù)《阿里巴巴Java開(kāi)發(fā)手冊(cè)》 ,數(shù)據(jù)庫(kù)的表設(shè)計(jì)允許適當(dāng)冗余,以提升SQL查詢的性能,避免表的關(guān)聯(lián)查詢,下列哪些字段不允許幾余:【CD】
A、文本類型的字段。
B、基本固定不變的類目名稱。
C、 varchar(2500)的字段
D、需要頻繁修改的字段
.【推薦】字段允許適當(dāng)冗余,以提高性能,但是必須考慮數(shù)據(jù)同步的情況。冗余字段應(yīng)遵循:
1)不是頻繁修改的字段。
2)不是 varchar 超長(zhǎng)字段,更不能是 text 字段。
短連接:短連接操作步驟是:
連接-》數(shù)據(jù)傳輸-》關(guān)閉連接;
長(zhǎng)連接:長(zhǎng)時(shí)間保持客戶端與服務(wù)端的連接狀態(tài)。
連接-》數(shù)據(jù)傳輸-》保持連接-》數(shù)據(jù)傳輸-》保持連接-》…………-》關(guān)閉連接;
要求:長(zhǎng)連接在沒(méi)有數(shù)據(jù)通信時(shí),定時(shí)發(fā)送數(shù)據(jù)包,以維持連接狀態(tài);短連接在沒(méi)有數(shù)據(jù)傳輸時(shí)直接關(guān)閉就行了

關(guān)于表字段和索引,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【ABD】多選
A .表字段注釋,如果修改字段含義或?qū)ψ侄伪硎镜臓顟B(tài)追加時(shí),需要及時(shí)更新。
B .合適的字符存儲(chǔ)長(zhǎng)度,不但節(jié)約數(shù)據(jù)庫(kù)表空間、節(jié)約索引存儲(chǔ),更重要的是提升檢索速度。
C .針對(duì)表的每個(gè)字段都增加索引,加快查詢速度。
D .字段的區(qū)分度越高,索引的查找速度越快。
創(chuàng)建表的時(shí)候?qū)懽⑨?br> create table test1 (
field_name int comment ‘字段的注釋’
)comment=‘表的注釋’;
修改表的注釋
alter table test1 comment ‘修改后的表的注釋’;
修改字段的注釋
alter table test1 modify column field_name int comment ‘修改后的字段注釋’;

關(guān)于數(shù)據(jù)庫(kù)命名規(guī)則,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【BCD】多選
A .數(shù)據(jù)庫(kù)庫(kù)名和表名沒(méi)有規(guī)定,可任意取名,只要方便記憶即可。
B .庫(kù)名應(yīng)該盡量與應(yīng)用名稱保持一致,表的命名最好是業(yè)務(wù)名稱_表名的方式。
C .無(wú)論是庫(kù)名還是表名都禁用保留字,如desc、match、range等。
D .表名、字段名必須使用小寫(xiě)字母或數(shù)字。

關(guān)于數(shù)據(jù)庫(kù)是與否概念的列的命名方式,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【BD】多選
A .對(duì)于是與否概念的列名,必須使用can_abc 來(lái)表示。
B .對(duì)于是與否概念的列名,必須使用is_abc 來(lái)表示。
C .數(shù)據(jù)類型是varchar(1)( Y表示是,N表示否)。
D .數(shù)據(jù)類型是unsigned tiny int.( 1表示是,0表示否)。

關(guān)于數(shù)據(jù)庫(kù)中表相關(guān)的命名,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【ABD】多選
A .表名、字段名禁止出現(xiàn)數(shù)字開(kāi)頭,禁止兩個(gè)下劃線中間只出現(xiàn)數(shù)字。
B .表名不使用復(fù)數(shù)名詞。
C .表必備三字段命名:id, gmt_create, gmt_modify。
D .表必備三字段命名:id, gmt_create, gmt_modified。

關(guān)于數(shù)據(jù)庫(kù)索引的命名,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【ACD】多選
A .主鍵索引(primary key),字段類型為unsigned bigint、單表時(shí)推薦自增、步長(zhǎng)為1。
B .主鍵索引(primary key),字段類型為unsigned bigint、單表時(shí)推薦自增、步長(zhǎng)為2。
C .唯一索引(unique key),命名規(guī)則為uk_字段名(如果多個(gè)字段繼續(xù)下劃線)。
D .普通索引(normal index),標(biāo)記成idx_字段名(如果多個(gè)繼續(xù)下劃線)。

關(guān)于建表規(guī)約,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【ABCD】多選
A. 字段為非負(fù)數(shù),必須 定義為unsigned。
B. 存儲(chǔ)的字符數(shù)幾乎完全相等的字段,推薦定義為char類型存儲(chǔ)。
C. varchar會(huì)預(yù)先分配存儲(chǔ)空間
D. 不得使用級(jí)聯(lián)與外鏈,一切外鏈概念必須在應(yīng)用層解決。

=================(二)索引規(guī)約==================
利用索引進(jìn)行排序,下列哪些說(shuō)法是正確的:多選 【AB】
A.查詢語(yǔ)句 WHERE a = 10 ORDER BYb,可以利用素引(a,b)來(lái)進(jìn)行索引排序。
B.查詢語(yǔ)句WHERE a > 10 ORDER BY b,不可以利用素引(a,b)進(jìn)行索引排序。
C.查詢語(yǔ)句WHERE a IN (10, 11) ODER BY b.可以利用索引(a,b)來(lái)進(jìn)行索引排序。
D.查詢語(yǔ)句WHER a>10 AND b=20 ORDER BY a,可以利用索引(b,a)來(lái)進(jìn)行素引排序。
解析:--where a in(...) order by b,c (對(duì)于排序來(lái)說(shuō),多個(gè)等于條件,也是范圍查詢)。又因?yàn)椋罕热缢饕杏蟹秶檎?,那么索引有序性無(wú)法利用。

關(guān)于索引的設(shè)計(jì),下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【ACD】多選
A .對(duì)varchar類型的字段建立索引,必須指定索引長(zhǎng)度。
B .對(duì)varchar類型的字段建立索引,不需要指定索引長(zhǎng)度,這樣索引區(qū)分度最好。
C .業(yè)務(wù)上具有唯一特性的字段(含組合字段),必須指定唯一索引。
D .建復(fù)合索引時(shí),一般選擇區(qū)分度高的字段放在最左列。

關(guān)于索引的使用,下列哪些說(shuō)法是正確的:【BCD】多選
A .查詢語(yǔ)句 WHERE a+1 = 5 可以利用a索引。
B .查詢語(yǔ)句WHERE date_format(gmt_create, '%Y-%m-%d') = '2016-11-11'無(wú)法利用gmt_create索引。
C .當(dāng) c 列類型為 char 時(shí),查詢語(yǔ)句 WHERE c = 5 無(wú)法利用c索引。
D .索引字段使用時(shí)不能進(jìn)行函數(shù)運(yùn)算。

關(guān)于MySQL性能優(yōu)化的描述,下列哪些說(shuō)法是正確的:【ABCD】多選
A .主鍵查詢優(yōu)先于二級(jí)索引查詢。
B .表連接有一定的代價(jià),故表連接數(shù)量越少越好。
C .一般情況下,二級(jí)索引掃描優(yōu)先于全表掃描。
D .可以使用通過(guò)索引避免排序代價(jià)。
注意:這四條都要好好理解,對(duì)于索引優(yōu)化都很有好處的。二級(jí)索引可以學(xué)習(xí)一下!

關(guān)于索引的設(shè)計(jì)和使用,下列哪些說(shuō)法是正確的:【ABCD】多選
A .若查詢條件中不包含索引的最左列,則無(wú)法使用索引。
B .對(duì)于范圍查詢,只能利用索引的最左列。
C .對(duì)于order by A或group by A語(yǔ)句,在A上建立索引,可以避免排序。//易錯(cuò)
D .對(duì)于多列排序,需要所有所有列排序方向一致,才能利用索引。
注意:組合索引有一個(gè)特性:做做前綴匹配,即(A,B,C)相當(dāng)于(A),(A,B),(A,B,C)
索引使用規(guī)則:
若查詢條件中不包含索引的最左列,無(wú)法使用索引
對(duì)于范圍查詢,只能利用索引的最左列
對(duì)于order by A語(yǔ)句或group by A語(yǔ)句,在A上建立索引,可以避免排序
對(duì)于多列排序,需要所有所有列排序方向一致,才能利用索引。

關(guān)于數(shù)據(jù)庫(kù)模糊檢索的描述下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【ABD】多選
A .絕對(duì)禁止左模糊。
B .絕對(duì)禁止全模糊。
C .絕對(duì)禁止右模糊。
D .全模糊或左模糊查詢需求,優(yōu)先使用搜索引擎。

關(guān)于組合索引,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【AC】多選
A.查詢條件 where a='0' and b='1' , 當(dāng)組合索引為(b,a)的時(shí)候能進(jìn)行索引掃描。
B.查詢條件 where a='0' and b='1' ,當(dāng)組合索引為(c,a,b)的時(shí)候進(jìn)行索引掃描。
C.查詢 select b from table where a='0',當(dāng)組合索引為(a,b)的時(shí)候會(huì)進(jìn)行索引掃描。
D.查詢條件 where a > '0' order by b,當(dāng)組合索引為(a,b)時(shí)會(huì)利用索引進(jìn)行排序。

對(duì)于索引(a,b,c),下列哪些說(shuō)法是正確的【ABC】多選
A.查詢語(yǔ)句 where a between 5 and 10 可以使用該索引
B.查詢語(yǔ)句where a = 5 and b between 5 and 10 可以使用該索引.
C.查詢語(yǔ)句 where a in(5,6,7,8,9)and b=5可以使用該索引。
D.查詢語(yǔ)句 where b = 5 and c = 10 可以使用該索引。

關(guān)于使用explain對(duì)數(shù)據(jù)庫(kù)性能進(jìn)行優(yōu)化分析,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》【A】單選
A.SQL性能優(yōu)化的目標(biāo):至少要達(dá)到range級(jí)別,要求是ref級(jí)別,如果可以是consts最好。
B.index級(jí)別走的是掃描索引,所以管卡壓我非常比ref快。
C.range級(jí)別是指對(duì)表進(jìn)行范圍索引。
D.ref級(jí)別是指使用主鍵或者唯一索引。

關(guān)于索引效率,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【CD】
A .使用索引的效率一定高于全表掃描的效率。
B .關(guān)于explain的結(jié)果,type=index的索引效率好于type=ref。
C .sql查詢條件 where a like ‘%阿里%’ ,不會(huì)走索引。
D .sql查詢條件 where a like ‘阿里%’ ,a列創(chuàng)建了索引,一般會(huì)使用索引進(jìn)行檢索。

關(guān)于join的描述,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【AB】多選
A.join的字段,數(shù)據(jù)類型須保持絕對(duì)一致。
B.join列必須有索引。
C.優(yōu)先where過(guò)濾,其次再join關(guān)聯(lián)。
D.只要滿足業(yè)務(wù)需求和,join表的個(gè)數(shù)不受限制 。

對(duì)于索引的基本原理,下列哪些說(shuō)法是正確的:【 ABCD】多選
A. 索引的數(shù)據(jù)結(jié)構(gòu)主要有B-Tree、Hash、R-Tree、Full-Text等。
B. 從物理存儲(chǔ)來(lái)看,主要分為聚集(clustered)和非聚集(non-clustered)索引。
C. MySQL的表是聚集索引組織表(index of table)。
D. 聚簇索引的葉子節(jié)點(diǎn)存放的是數(shù)據(jù),非聚簇索引的葉子節(jié)點(diǎn)存放的是非聚集索引的key和主鍵值。

關(guān)于使用explain對(duì)數(shù)據(jù)庫(kù)性能進(jìn)行優(yōu)化分析,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【A】
A .SQL性能優(yōu)化的目標(biāo):至少要達(dá)到 range 級(jí)別,要求是ref級(jí)別,如果可以是consts最好。
B .index級(jí)別走的是掃描索引,所以速度會(huì)比ref快。
C .range級(jí)別是指對(duì)表進(jìn)行范圍索引。
D .ref級(jí)別是指使用主鍵或者唯一索引。

關(guān)于explain執(zhí)行計(jì)劃,下列哪些說(shuō)法是正確的【ABCD】多選
A. type列顯示了連接使用了何種類型,從最好到最差的連接類型為:const,eq_ref,ref,range,index,ALL。
B. possible_keys顯示可能在這張表中的索引,如果為空,表示沒(méi)有可能的索引。
C. key列表示實(shí)際使用的索引。
D. ref列顯示索引的哪一列被使用了。

=================(三)SQL語(yǔ)句==================
關(guān)于分頁(yè)查詢,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【ABC】多選
A .分頁(yè)查詢,當(dāng)統(tǒng)計(jì)的count為0時(shí),應(yīng)該直接返回,不要再執(zhí)行分頁(yè)查詢語(yǔ)句。
B .iBATIS自帶的queryForList(String statementName,int start,int size)分頁(yè)接口有性能隱患,不允許使用。
C .定義明確的sql查詢語(yǔ)句,通過(guò)傳入?yún)?shù)start和size來(lái)實(shí)現(xiàn)分頁(yè)邏輯。//易錯(cuò)
D .可使用存儲(chǔ)過(guò)程寫(xiě)分頁(yè)邏輯,提高效率。

關(guān)于數(shù)據(jù)庫(kù)中NULL的描述,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【BD】多選
A .NULL=NULL的返回結(jié)果為true。
B .NULL與任何值的比較結(jié)果都為NULL。
C .NULL<>1的返回結(jié)果為true。
D .當(dāng)某一列的值全是NULL時(shí),sum(col)的返回結(jié)果為NULL。
提示:count(col1,col2) 如果其中有一列為空則返回 0,那么count(col)也是一樣的!

關(guān)于count相關(guān)的使用,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【ACD】多選
A、不要使用count(列名)或count(常量)來(lái)替代count()
B、count(列名)會(huì)統(tǒng)計(jì)值為NULL的行,而count(
)不會(huì)統(tǒng)計(jì)。
C、當(dāng)某一列的值全是NULL時(shí),count(列名)返回0。
D、在程序代碼中寫(xiě)分頁(yè)查詢邏輯時(shí),若count為0應(yīng)直接返回,以免執(zhí)行后面的分頁(yè)語(yǔ)句。

關(guān)于數(shù)據(jù)庫(kù)查詢的描述,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【BCD】多選
A. 當(dāng)需要獲取數(shù)據(jù)表所有字段的值映射到DO時(shí),可使用Select * 來(lái)查詢。
B. 絕對(duì)禁止左模糊和全模糊查詢;限制使用右模糊查詢。全模糊或左模糊搜索的需求走搜索引擎實(shí)現(xiàn)。
C. 禁止使用存儲(chǔ)過(guò)程來(lái)查詢返回?cái)?shù)據(jù)。
D. 在表查詢中,需order by排序時(shí),優(yōu)先使用主鍵列,索引列。

=================(四)ORM映射==================

關(guān)于使用iBATIS操作數(shù)據(jù),下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》【CD】多選
A.如果表中字段和DO中的字段名完全一致,可直接用DO作為resultClass。
B.iBATIS中自帶了queryForList(String statementName,int start,int size)的分頁(yè)接口,可直接使用,無(wú)需再自行封閉。
C.不要定義大而全的數(shù)據(jù)更新接口,對(duì)整個(gè)DO進(jìn)行更新。必須按需更新。
D.sqlmap中寫(xiě)update語(yǔ)句時(shí),必須包含對(duì)記錄中g(shù)mt_modified字段的更新。

關(guān)于ORM的規(guī)則,下列哪些說(shuō)法符合《阿里巴巴Java開(kāi)發(fā)手冊(cè)》:【AD】
A .數(shù)據(jù)庫(kù)中,表達(dá)是與否概念的字段,必須使用is_xxx的方式命名。
B .推薦使用iBATIS自帶的queryForList(String statementName,int start,int size)進(jìn)行分頁(yè)查詢。(不推薦)
C .為避免寫(xiě)resultMap,可以直接拿HashMap與HashTable作為查詢結(jié)果集的輸出。
D .不要用resultClass當(dāng)返回參數(shù),即使所有類屬性名與數(shù)據(jù)庫(kù)字段一一對(duì)應(yīng),也需要定義。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容