发表于: 2020-04-08 04:00:12
1 1267
今日完成:
1、为什么不可以用Select * from table?
Select * from table 是查询并返回表的所有字段,一般查询条件下我们并不需要获取所有字段的信息。这样会浪费io资源,影响查询效率。将*替换为需要获取的字段即可。
2、为什么DB的设计中要使用Long来替换掉Date类型?
mysql中可以用来表示时间的几个类型:
但这些我们都不用,一般用long替换时间类型存储时间。
引入时间戳的概念:
一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
使用时间戳的优势有哪些呢?
1、方便计算。日常需求中更常见的场景是计算时间段、比较两个时间点、数据排序,用时间戳来计算更方便。
2、精确。可以根据自己的需求来决定时间精度。(毫秒、纳秒)
3、获取、转换方便。
3、自增ID有什么坏处?什么样的场景下不使用自增ID?
自增id的缺点是它只能保证在同一实例下一个表ID唯一。在分布式架构项目中,多个mysql实例会遇到主键全局唯一性的问题。
UUID:通用唯一标识码,它可以让分布式系统中的所有元素,都能有唯一的辨识信息。UUID是基于当前时间、计数器(counter)和硬件标识(通常为无线网卡的MAC地址)等数据计算生成的。通常平台会提供生成的API。
4、什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
db的索引就相当于为数据建立的目录,可以据此来提高查询效率。经常被拿来搜索的字段,应该对其建立索引。
10万数据量下建立索引就会看出性能的差别了。
5、唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
唯一索引与普通索引的不同在于索引列的值唯一。
字段值需要保证其唯一性的情况下,可以建立唯一索引。
6、如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
不需要,数据库在插入之前会判断这个字段是否唯一。
7、CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
数据创建时,赋值当前时间戳给createAt
数据变更时,赋值当前时间戳给updateAt
不开放。
8、修真类型应该是直接存储Varchar,还是应该存储int?
存储int,使用0,1,2...来表示修真类型。
9、varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
varchar(M)是可变长字符串类型,M可以用来设置它的最大长度。varchar值保存时只保存需要的字符数,另加一个字节记录长度。(如果列字节超过255,则使用两个字节)
varchar有默认值,text和longtext无默认值
mysql5.0以上的版本中varchar数据类型的长度支持到了65535字节。
Text的最大长度是可以存储 65535 (2^16 – 1) 个字符
LongText的最大长度是可以存储4294967295 (2^32 – 1) 个字符。
收获:
通过深度思考,扩展了自己的一些知识盲点。
遇到的问题:
深度思考有些问题的答案主要是通过在网上查资料搜索得来,没有自己的实践,惭愧!
明日计划:
编写DAO,分别JdbcTemplate和Mybatis连接数据库
评论