发表于: 2017-07-06 19:52:53

2 987


一.今天完成的主要内容

1.用存储过程向数据库插入多条数据

以上是sql的存储过程

以上是存储过程的执行过程,可以看到,插入十万条数据用了一个小时,而且只能插入相同的数据,效率非常低,以后肯定不会再使用

2.向数据库中插入了三十万条随机数据

方法是先用java随机生成数据,然后将数据写入.txt文本文档中,然后再利用navicat的导入文件功能将.txt文件中的数据导入到数据库中

(该方法比起存储过程快了许多,但耗费的时间同样非常多,以后肯定也不会再使用)

3.对比插入索引前后数据库查找数据的效率

插入索引前,查找比较靠后的数据如下:

可以看到用时接近10秒钟,接下来是插入索引后的查找数据时间

可以看到用时基本为0,速度快了不是一点半点.

4.尝试回答mysql中的深度思考问题

       思考5:    为什么DB的设计中要用LONG替换DATE类型

选择数据类型时的两个原则,一是选择合理范围内最小的,二是选择相对简单的数据类型.因为日期加上时间(YYYYMMDDHHMMSS)一般就是14,8个字节的LONG整数类型(有符号的可以存放至少18位的数字)完全可以存放的下,所以根据上述原则,选择LONG类型替代Date类型,提高性能,尤其是在大型数据库中,性能提升会更加明显.再加上际应用中根据创建时间和更新时间排序是常有的操作,而使用LONG类型更容易进行排序,这样效率更高.

 

       思考6: 自增ID有什么坏处?什么样的场景下不使用自增ID

Mysql数据库中的id设为自增,容易产生id不连续的问题,如果一个表在创建时使用了自增ID,后续如果将该表中的数据删除了一部分,然后再添加一部分时ID依然是在未清除的基础上累加.还有当数据重复时系统不会处理.还存在一个问题,当两个表进行合并时自增ID不能保证数据的唯一.

 

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

索引就像是给无序的数据添加了一个目录,这样在查找数据时不用一个接一个的去找数据,而是通过目录快速对数据进行定位,提高查找效率.数据量越大,建索引和不建索引之间性能的差别越明显.因为每个索引都需要占用磁盘空间,所以索引也不是越多越好.如果一个字段经常需要进行排序,查询,那么这样的字段适合建立索引,简单的说就是频繁出现在where后面的字段就可以添加索引.如果该字段的值是唯一的话,那么还可以选择唯一索引,效率更高.

 

        思考8:普通索引和唯一索引的区别,什么时候需要唯一索引

唯一索引基本和普通索引相同,其区别在于普通索引标示被索引的数据列中的值允许重复,但是被唯一索引标识的数据列中的值不允许重复.也就是说,唯一索引保证了数据的唯一性.所以唯一索引适用于对于每行数据来说都是唯一的那种数据,比如身份证号,学号,准考证号,电话号码,QQ号等.

 

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

不需要,因为唯一索引标识的数据必须唯一,数据库会检查该数据是否唯一,如果不唯一,该条数据是插入不到数据库中的,所以不需要事先判断这个QQ号是否存在.

 

        思考11.修真类型应该是直接存储Varchar,还是应该存储int?

因为修真类型只有有限的几种,而且一旦写入一般不会更改,所以感觉可以在存储时使用tinyint类型,同时建立每种修真类型和整数之间的一一对应关系,比如java开发就用1表示,前端用2表示,这样不论是存储还是查找时速度都会更快,然后再创建一个表用于表示整数和修真类型之间的对应关系.感觉这样速度会更快一些

 

        思考12. varchar类型的长度怎么确定?有什么样的原则,和TextLongText的区别是什么?

Varchar类型的字符串是可变长度字符串,最大长度为65535个字节,但实际存储的数据最大长度要比65535要小一些,因为varchar类型会用一个字节来记录该数据值的长度,如果值超过255个字节,那么会用两个字节记录..varcharText之间最主要的区别还是在于varchar可以指定默认长度,TEXT不能指定默认长度,使用时能用varchar的就不要用TEXT类型.

 

        思考13 怎么进行分页数据的查询,如何判断是否有下一页?

mysql中用sql语句是:select * from table_name limit start, pagesize;

其中start是从第几条开始,假设是1000,那么就是从第1001条数据开始,pagesize是查询的范围,假设是50,那么就是查询从1001条到1050条之间的数据.如何判断暂时还没想到,还请师兄指点.

 

       思考14.为什么不可以用Select * from table?

这条sql语句的功能是列出该表中的所有数据,如果一个表中的数据比较少还没有问题,如果一个表中数据量比较大,占用的时间非常多,而且没有什么意义.

5.配置maven文件,创建maven工程

创建出来的一个maven工程目录结构如图

通过mvn package命令,生成该项目的jar包,执行完毕后,可以看到在工程target文件下生成了jar包

然后再通过clean命令清理目标文件中的内容,执行完毕后,目录恢复到打包之前的结构

最后通过mvn install命令将jar包生成进本地仓库中,这样以后其他工程需要用到这个jar包时,可以直接在maven工程中添加依赖

执行完毕后,可以看到在本地仓库目录下生成该项目的依赖

二.明天的计划安排

1.编写DAO,尝试用JDBCTemplate和Mybatis链接数据库

2.学习Junit,尝试编写单元测试

3,如果进度较快的话,继续学习spring

三.遇到的主要问题

今天深度思考中的有些问题比较难.解决的方式是查阅各种博客技术文章,思考后得出一些自己的看法,不知道是不是准确,请师兄指点

四.收获

1.了解了sql存储过程的基本语法

2.了解了数据库普通索引,唯一索引,自增ID,varchar变量等更为细节的内容

3.了解了maven的作用,它主要是用来管理项目和依赖,能够自动生成比较规范的项目结构,并且只需要在配置文件中进行配置就可以使用jar包,而且可以通过命令完成编译,运行,打包的过程,大大简化了程序员的工作,提高工作效率.


返回列表 返回列表
评论

    分享到