=================(一)建表规约==================
根据《阿里巴巴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当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义。