发表于: 2017-12-07 22:33:10
3 791
一、 今天完成的事情:
复习了task1-4 、task1-5 、task1-6,完成了task1-7、task1-8、task1-9、task1-10
昨天忘记打“宣言”字段,今天重新设计了表
用navicat把宣言改成“老大最帅”
用mysql将宣言改成“老大最帅啊”
将制作好的表导出sql文件并删除表中数据,之后完成恢复备份的数据。
给name列建立了索引,我认为经常需要查询的数据都需要建立索引,比如学号,修真类型。
插入了10条信息,并查看有索引和无索引的情况下sql执行状况
第一次完全一样,然后加大写入数据量
一次插入50条数据后发现细微差别
可以看出,在添加索引的情况下,插入数据的效率会下降。这是因为索引的弊端,每插入一条数据都要更新一次索引内容,导致插入数据效率下降。
试着回答深度思考里面那些关于MySQL的问题:
1、为什么DB的设计中要使用Long来替换掉Date类型?
使用Long类型可以方便的计算两个日期之间的时间差。
2、自增ID有什么坏处?什么样的场景下不使用自增ID?
不太明白,查了网上的资料,比较倾向于这个人的观点:
3、什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
索引就像一本书的目录,其存在的唯一目的就是为了让我们对内容进行快速的查询,索引是从属于表,在数据字典中独立存放但不能独立存在。选择的数据量占总数据量的5%或者更大,就需要建立索引。在一个或者一些字段需要频繁用作查询条件,并且表数据较多的时候,对这些字段创建索引会明显提高查询速度。
4、唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
唯一索引是不允许其中任何两行具有相同索引值的索引,普通索引是最基本的索引类型,没有唯一性之类的限制。
5、如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
不需要,若有重复数据,数据库会直接报bug,况且QQ不存在重复。
6、CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
CreateAT在创建的时候赋值,UpdateAt在此后每次更新此条数据的时候赋值;
可以使用数据库的触发器直接赋值,不需要开放给外部调用接口
7、修真类型应该是直接存储Varchar,还是应该存储int?
修真类型数量有限,可以用int数据直接代替,已节约数据库的空间,调用时再使用接口还原
8、varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
采用按需定义原则,例如QQ号最大长度为11,则长度是“11+1”;
9、为什么不可以用Select * from table?
Select是操作数据库里的对象的数据操作语言,如果可以用,那将显示所有数据库中的表,这样会导致处理负荷高,影响执行效率。
二、 明日计划:
继续task11之后的步骤,不紧不慢,稳扎稳打。
三、 遇到的问题:
1、 在查看有无索引的情况下sql执行效率的时候试了几次才完成。
2、 深度思考的问题很有意义,很遗憾今天才看到,有几个问题还是答不上来,甚至资料也查不到一个靠谱的,师兄们的答案也是五花八门的,之后几天都回头思考一下,自己也要回答出这些问题。
3、 还是基础问题,需要时刻提醒自己多敲代码,打字飞快的人,来这两天敲代码全都是兰花指在戳。
四、 收获:
对sql语句的基本操作都有了一定的记忆与理解,很多有意思的问题值得深思,每天都在补基础,一点一点慢慢来吧!
评论