java 数据库 规范_阿里Java规范-05-MySQL数据库

本文详细介绍了《阿里巴巴Java开发手册》中的数据库设计规范,包括建表规约、索引规约、SQL语句使用等多个方面。强调了字段冗余、索引设计、表命名和字段命名的规则,以及如何优化查询性能,例如避免全表扫描和模糊查询。同时,还提及了分页查询、NULL处理、ORM映射等相关最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

=================(一)建表规约==================

根据《阿里巴巴Java开发手册》 ,数据库的表设计允许适当冗余,以提升SQL查询的性能,避免表的关联查询,下列哪些字段不允许几余:【CD】

A、文本类型的字段。

B、基本固定不变的类目名称。

C、 varchar(2500)的字段

D、需要频繁修改的字段

.【推荐】字段允许适当冗余,以提高性能,但是必须考虑数据同步的情况。冗余字段应遵循:

1)不是频繁修改的字段。

2)不是 varchar 超长字段,更不能是 text 字段。

短连接:短连接操作步骤是:

连接-》数据传输-》关闭连接;

长连接:长时间保持客户端与服务端的连接状态。

连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接;

要求:长连接在没有数据通信时,定时发送数据包,以维持连接状态;短连接在没有数据传输时直接关闭就行了

关于表字段和索引,下列哪些说法符合《阿里巴巴Java开发手册》:【ABD】多选

A .表字段注释,如果修改字段含义或对字段表示的状态追加时,需要及时更新。

B .合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

C .针对表的每个字段都增加索引,加快查询速度。

D .字段的区分度越高,索引的查找速度越快。

创建表的时候写注释

create table test1 (

field_name int comment ‘字段的注释’

)comment=‘表的注释’;

修改表的注释

alter table test1 comment ‘修改后的表的注释’;

修改字段的注释

alter table test1 modify column field_name int comment ‘修改后的字段注释’;

关于数据库命名规则,下列哪些说法符合《阿里巴巴Java开发手册》:【BCD】多选

A .数据库库名和表名没有规定,可任意取名,只要方便记忆即可。

B .库名应该尽量与应用名称保持一致,表的命名最好是业务名称_表名的方式。

C .无论是库名还是表名都禁用保留字,如desc、match、range等。

D .表名、字段名必须使用小写字母或数字。

关于数据库是与否概念的列的命名方式,下列哪些说法符合《阿里巴巴Java开发手册》:【BD】多选

A .对于是与否概念的列名,必须使用can_abc 来表示。

B .对于是与否概念的列名,必须使用is_abc 来表示。

C .数据类型是varchar(1)( Y表示是,N表示否)。

D .数据类型是unsigned tiny int.( 1表示是,0表示否)。

关于数据库中表相关的命名,下列哪些说法符合《阿里巴巴Java开发手册》:【ABD】多选

A .表名、字段名禁止出现数字开头,禁止两个下划线中间只出现数字。

B .表名不使用复数名词。

C .表必备三字段命名:id, gmt_create, gmt_modify。

D .表必备三字段命名:id, gmt_create, gmt_modified。

关于数据库索引的命名,下列哪些说法符合《阿里巴巴Java开发手册》:【ACD】多选

A .主键索引(primary key),字段类型为unsigned bigint、单表时推荐自增、步长为1。

B .主键索引(primary key),字段类型为unsigned bigint、单表时推荐自增、步长为2。

C .唯一索引(unique key),命名规则为uk_字段名(如果多个字段继续下划线)。

D .普通索引(normal index),标记成idx_字段名(如果多个继续下划线)。

关于建表规约,下列哪些说法符合《阿里巴巴Java开发手册》:【ABCD】多选

A. 字段为非负数,必须 定义为unsigned。

B. 存储的字符数几乎完全相等的字段,推荐定义为char类型存储。

C. varchar会预先分配存储空间

D. 不得使用级联与外链,一切外链概念必须在应用层解决。

=================(二)索引规约==================

利用索引进行排序,下列哪些说法是正确的:多选 【AB】

A.查询语句 WHERE a = 10 ORDER BYb,可以利用素引(a,b)来进行索引排序。

B.查询语句WHERE a > 10 ORDER BY b,不可以利用素引(a,b)进行索引排序。

C.查询语句WHERE a IN (10, 11) ODER BY b.可以利用索引(a,b)来进行索引排序。

D.查询语句WHER a>10 AND b=20 ORDER BY a,可以利用索引(b,a)来进行素引排序。

解析:--where a in(...) order by b,c (对于排序来说,多个等于条件,也是范围查询)。又因为:比如索引中有范围查找,那么索引有序性无法利用。

关于索引的设计,下列哪些说法符合《阿里巴巴Java开发手册》:【ACD】多选

A .对varchar类型的字段建立索引,必须指定索引长度。

B .对varchar类型的字段建立索引,不需要指定索引长度,这样索引区分度最好。

C .业务上具有唯一特性的字段(含组合字段),必须指定唯一索引。

D .建复合索引时,一般选择区分度高的字段放在最左列。

关于索引的使用,下列哪些说法是正确的:【BCD】多选

A .查询语句 WHERE a+1 = 5 可以利用a索引。

B .查询语句WHERE date_format(gmt_create, '%Y-%m-%d') = '2016-11-11'无法利用gmt_create索引。

C .当 c 列类型为 char 时,查询语句 WHERE c = 5 无法利用c索引。

D .索引字段使用时不能进行函数运算。

关于MySQL性能优化的描述,下列哪些说法是正确的:【ABCD】多选

A .主键查询优先于二级索引查询。

B .表连接有一定的代价,故表连接数量越少越好。

C .一般情况下,二级索引扫描优先于全表扫描。

D .可以使用通过索引避免排序代价。

注意:这四条都要好好理解,对于索引优化都很有好处的。二级索引可以学习一下!

关于索引的设计和使用,下列哪些说法是正确的:【ABCD】多选

A .若查询条件中不包含索引的最左列,则无法使用索引。

B .对于范围查询,只能利用索引的最左列。

C .对于order by A或group by A语句,在A上建立索引,可以避免排序。//易错

D .对于多列排序,需要所有所有列排序方向一致,才能利用索引。

注意:组合索引有一个特性:做做前缀匹配,即(A,B,C)相当于(A),(A,B),(A,B,C)

索引使用规则:

若查询条件中不包含索引的最左列,无法使用索引

对于范围查询,只能利用索引的最左列

对于order by A语句或group by A语句,在A上建立索引,可以避免排序

对于多列排序,需要所有所有列排序方向一致,才能利用索引。

关于数据库模糊检索的描述下列哪些说法符合《阿里巴巴Java开发手册》:【ABD】多选

A .绝对禁止左模糊。

B .绝对禁止全模糊。

C .绝对禁止右模糊。

D .全模糊或左模糊查询需求,优先使用搜索引擎。

关于组合索引,下列哪些说法符合《阿里巴巴Java开发手册》:【AC】多选

A.查询条件 where a='0' and b='1' , 当组合索引为(b,a)的时候能进行索引扫描。

B.查询条件 where a='0' and b='1' ,当组合索引为(c,a,b)的时候进行索引扫描。

C.查询 select b from table where a='0',当组合索引为(a,b)的时候会进行索引扫描。

D.查询条件 where a > '0' order by b,当组合索引为(a,b)时会利用索引进行排序。

对于索引(a,b,c),下列哪些说法是正确的【ABC】多选

A.查询语句 where a between 5 and 10 可以使用该索引

B.查询语句where a = 5 and b between 5 and 10 可以使用该索引.

C.查询语句 where a in(5,6,7,8,9)and b=5可以使用该索引。

D.查询语句 where b = 5 and c = 10 可以使用该索引。

关于使用explain对数据库性能进行优化分析,下列哪些说法符合《阿里巴巴Java开发手册》【A】单选

A.SQL性能优化的目标:至少要达到range级别,要求是ref级别,如果可以是consts最好。

B.index级别走的是扫描索引,所以管卡压我非常比ref快。

C.range级别是指对表进行范围索引。

D.ref级别是指使用主键或者唯一索引。

关于索引效率,下列哪些说法符合《阿里巴巴Java开发手册》:【CD】

A .使用索引的效率一定高于全表扫描的效率。

B .关于explain的结果,type=index的索引效率好于type=ref。

C .sql查询条件 where a like ‘%阿里%’ ,不会走索引。

D .sql查询条件 where a like ‘阿里%’ ,a列创建了索引,一般会使用索引进行检索。

关于join的描述,下列哪些说法符合《阿里巴巴Java开发手册》:【AB】多选

A.join的字段,数据类型须保持绝对一致。

B.join列必须有索引。

C.优先where过滤,其次再join关联。

D.只要满足业务需求和,join表的个数不受限制 。

对于索引的基本原理,下列哪些说法是正确的:【 ABCD】多选

A. 索引的数据结构主要有B-Tree、Hash、R-Tree、Full-Text等。

B. 从物理存储来看,主要分为聚集(clustered)和非聚集(non-clustered)索引。

C. MySQL的表是聚集索引组织表(index of table)。

D. 聚簇索引的叶子节点存放的是数据,非聚簇索引的叶子节点存放的是非聚集索引的key和主键值。

关于使用explain对数据库性能进行优化分析,下列哪些说法符合《阿里巴巴Java开发手册》:【A】

A .SQL性能优化的目标:至少要达到 range 级别,要求是ref级别,如果可以是consts最好。

B .index级别走的是扫描索引,所以速度会比ref快。

C .range级别是指对表进行范围索引。

D .ref级别是指使用主键或者唯一索引。

关于explain执行计划,下列哪些说法是正确的【ABCD】多选

A. type列显示了连接使用了何种类型,从最好到最差的连接类型为:const,eq_ref,ref,range,index,ALL。

B. possible_keys显示可能在这张表中的索引,如果为空,表示没有可能的索引。

C. key列表示实际使用的索引。

D. ref列显示索引的哪一列被使用了。

=================(三)SQL语句==================

关于分页查询,下列哪些说法符合《阿里巴巴Java开发手册》:【ABC】多选

A .分页查询,当统计的count为0时,应该直接返回,不要再执行分页查询语句。

B .iBATIS自带的queryForList(String statementName,int start,int size)分页接口有性能隐患,不允许使用。

C .定义明确的sql查询语句,通过传入参数start和size来实现分页逻辑。//易错

D .可使用存储过程写分页逻辑,提高效率。

关于数据库中NULL的描述,下列哪些说法符合《阿里巴巴Java开发手册》:【BD】多选

A .NULL=NULL的返回结果为true。

B .NULL与任何值的比较结果都为NULL。

C .NULL<>1的返回结果为true。

D .当某一列的值全是NULL时,sum(col)的返回结果为NULL。

提示:count(col1,col2) 如果其中有一列为空则返回 0,那么count(col)也是一样的!

关于count相关的使用,下列哪些说法符合《阿里巴巴Java开发手册》:【ACD】多选

A、不要使用count(列名)或count(常量)来替代count()

B、count(列名)会统计值为NULL的行,而count()不会统计。

C、当某一列的值全是NULL时,count(列名)返回0。

D、在程序代码中写分页查询逻辑时,若count为0应直接返回,以免执行后面的分页语句。

关于数据库查询的描述,下列哪些说法符合《阿里巴巴Java开发手册》:【BCD】多选

A. 当需要获取数据表所有字段的值映射到DO时,可使用Select * 来查询。

B. 绝对禁止左模糊和全模糊查询;限制使用右模糊查询。全模糊或左模糊搜索的需求走搜索引擎实现。

C. 禁止使用存储过程来查询返回数据。

D. 在表查询中,需order by排序时,优先使用主键列,索引列。

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

关于使用iBATIS操作数据,下列哪些说法符合《阿里巴巴Java开发手册》【CD】多选

A.如果表中字段和DO中的字段名完全一致,可直接用DO作为resultClass。

B.iBATIS中自带了queryForList(String statementName,int start,int size)的分页接口,可直接使用,无需再自行封闭。

C.不要定义大而全的数据更新接口,对整个DO进行更新。必须按需更新。

D.sqlmap中写update语句时,必须包含对记录中gmt_modified字段的更新。

关于ORM的规则,下列哪些说法符合《阿里巴巴Java开发手册》:【AD】

A .数据库中,表达是与否概念的字段,必须使用is_xxx的方式命名。

B .推荐使用iBATIS自带的queryForList(String statementName,int start,int size)进行分页查询。(不推荐)

C .为避免写resultMap,可以直接拿HashMap与HashTable作为查询结果集的输出。

D .不要用resultClass当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值