发表于: 2017-03-15 22:58:15

2 1346


今天完成的事

1.整理业务模型创建BD报名表

2、将立愿改为老大最帅

3、备份数据

4、对比建立索引和不建索引SQL的执行效率

Duration是持续时间。上面第三条和第七条是删掉索引的,第1和第5条是有建索引的。

5、11.查看深度思考中Mysql相关的一些问题,将自己思考的结果写在日报中,并查阅之前师兄的日报,看看是否有合自己思路接近或者是完全不一致的地方

为什么DB的设计中要使用Long来替换掉Date类型?

自己的想法:long的格式相对于date格式较统一,做运算时比较方便。

什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?

自己的想法:字段内容较为固定,且常出现在条件语句中,如where,group中的字段应该建索引。
参考同门:
表的主关键字
自动建立唯一索引
如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)
表的字段唯一约束
ORACLE利用索引来保证数据的完整性
如lc_hj(流程环节)中的lc_bh+hj_sx(流程编号+环节顺序)
直接条件查询的字段
在SQL中用于条件约束的字段
如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)
select * from zl_yhjbqk where qc_bh=’<????甼曀???>7001
查询中与其它表关联的字段
字段常常建立了外键关系
如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)
select * from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=’540100214511’
查询中排序的字段
排序的字段如果通过索引去访问那将大大提高排序速度
select * from zl_yhjbqk order by qc_bh(建立qc_bh索引)
select * from zl_yhjbqk where qc_bh=’7001’ order by cb_sx(建立qc_bh+cb_sx索引,注:只是一个索引,其中包括qc_bh和cb_sx字段)
查询中统计或分组统计的字段
select max(hbs_bh) from zl_yhjbqk
select qc_bh,count(*) from zl_yhjbqk group by qc_bh

唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。

自己的想法:唯一索引的字段内容必须具有唯一性,不能出现两个相同的字段,通常需要将能够代表唯一对象的属性建唯一索引。比如:身份证号。

如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?

自己的想法:需要。不然会发生错误。
参考同门:
唯一索引判重走的是索引,程序查询表判重走完索引还要返回给程序,显然唯一索引快。
要根据你的业务来确定:比如你这张表的数据在删除时并不是真正删除而是 将 is_deleted 字段设置为 1 这样你就不能依靠数据库的唯一索引在防止重复数据肯定是建立唯一索引判断重复数据最安全,最保险
唯一索引,则由数据库判断,一次 insert 即可,然后程序捕获异常处理。在大多数情况下效率略高。
CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?

自己的想法:createAt创建的时候赋值,update在更新数据的时候赋值
修真类型应该是直接存储Varchar,还是应该存储int?

自己的想法:应该直接存储varchar。因为字段的内容长度不一,而且是由字符字符和数字组成。

varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?

参考同门:
    经常变化的字段用varchar
    知道固定长度的用char
    尽量用varchar
    超过255字符的只能用varchar或者text
    能用varchar的地方不用text

varchar有系统默认长度,所以必须在括号里定义长度,可以有默认值。
text不能有默认值,存储或检索过程中,不存在大小写转换。
经常变化的字段用varchar,能用varchar的地方不用text(效率上: char>varchar>text)
longtext也是变长字符存储,只保存字符数据

为什么不可以用Select * from table?

自己的想法:*这里指代所有列,而现实当中我们需要的往往是当中的几列,如果table是一个属性多且内容大的表,用*来查询数据会造成大量的无效劳动。(虽然自己一直在用)
参考同门:
可能是认为*会忽略索引全表扫描什么的,其实这关键看where字句怎么写.不过用select *会有一些额外的IO开销.最好还是写字段把,作为你的编程习惯.
*和列出全部字段在神马表扫描上没有区别。唯一有区别就是,*列出的字段是按照table的列来的,如果数据库那边把列换了位置,你就悲剧了。要是列出字段,就不存在这个问题了。这个没有任何效率可言
select * from table 还是要先被解释成 select all column from table
尽量在SELECT后写明列名,有很多好处,如:减少不必要的输出(网络包大小)、安全性等等.

明天计划的事:

学习创建maven项目。

问题:

1、

ID自增long  我唯一觉得对应Navicat里的应该是bigint。 createAt,updateAt 我只是用datetime

2、今天只是用Navicat导出SQL文件备份(备份是通过备份按钮恢复数据)成功,用SQL语句没成功,而且右键数据库选择读取SQL文件读取成功却不显示表数据,刷新SQL不会添加到树形目录里,只有将转储的SQL文件拖动到数目录上树目录里才会有该表。

收获:

十条数据(是一条条插入的,网上查的一次插入百万条根本看不懂),刚开始对于SQL语句的运行效率不知道从何下手,后百度得到show profiles命令来展示执行计划。用法第一步:set profiling=1;第二部执行SQL语句 第三部:show profiles。

总结:

看网上人家数据库的用法自己都看不懂也没见过,通过今天做任务才知道了自己还有很多地方不足(刚开始自己插插改改数据觉得挺不错了),发现有许多知识点掌握不牢,比如通过mySQL语句设置 自增,添加索引等。



返回列表 返回列表
评论

    分享到