发表于: 2017-07-08 21:02:43

1 1254


今天完成的事情:

10.插入10条数据,查看有索引和无索引的情况下,Sql语句执行的效率

代码

public class InsertTest10 {
public static void main(String[] args) {
Connection conn = null;
       Statement stmt = null;

       try {
Class.forName("com.mysql.jdbc.Driver");
           conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user?characterEncoding=utf8&useSSL=true","****","*******");

           conn.setAutoCommit(false);

           long start = System.currentTimeMillis();

           stmt = conn.createStatement();
           for (int i = 0; i < 10; i++) {
stmt.addBatch("INSERT INTO user (user_name,password,sex) VALUE ('test1" + i +"','66666" + i +"',1)");
           }
stmt.executeBatch();
           conn.commit();

           long end = System.currentTimeMillis();
           System.out.println("插入10条数据耗时(ms):" + (end -start));

       } catch (ClassNotFoundException e) {
e.printStackTrace();
       } catch (SQLException e) {
e.printStackTrace();
       }finally {

try {
if (stmt != null) {
stmt.close();
               }
} catch (SQLException e) {
e.printStackTrace();
           }
try {
if (conn != null) {
conn.close();
               }
} catch (SQLException e) {
e.printStackTrace();
           }
}

}
}


无索引情况插入耗时

有索引情况


感觉有点不对劲,又试了几次,发现数据量太少,耗时波动太大,试了几次,决定插入10W条数据看看,得出结果

无索引耗时(ms):8597、8447

有索引耗时(ms):8917、8835

结论:插入数据时,无索引耗费的时间更少


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

mysql深度思考问题

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

        除去要考虑到时区的情况,使用Long类型可以方便的计算两个日期之间的时间差,而且可以优化数据库检索效率

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

        自增ID在合并数据库、旧数据导入、时需重新编辑数据,否则会互相覆盖;当数据类型中有不重复、检索频率高的情况下,           不使用自增ID

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

       索引是数据库的一种结构,相当于图书馆的目录;

       看了百度好几页,发现说法不一,大概是10w条数据以上要建索引,但还是得分析具体情况;

       在where、order by、group by的字段建立索引,也就是说要在查询、排序、分组的字段建立索引

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

       建立唯一索引的字段,不能插入重复的值,也因为这种特性,唯一索引更具效率;

       在已有主键的情况下,若有其他不允许重复的数据字段,则应该使用唯一索引

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

        不需要,若有重复数据,数据库会直接拒绝此次数据的插入

10.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?

       CreateAT在创建的时候赋值,UpdateAt在此后每次更新此条数据的时候赋值;

       可以使用数据库的触发器直接赋值,不需要开放给外部调用接口

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

        修真类型数量有限,可以用int数据直接代替,已节约数据库的空间,调用时再使用接口还原

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

        采用按需定义原则,例如QQ号最大长度为11,则长度是“11+1”;

        text:可变长度,最多65535个字符;可变长度,最多2的32次方-1个字符

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

        这个需要用Java程序代码编写,先不看,等后边再答

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

        因为表格没有像直接选择数据库“use database”一样的命令,在使用了某一个数据库的情况下,操作的对象是该数据库中所           有的表,使用Select * from table数据库不知道你使用的是哪个表


12.下载Java 7,并配置环境变量,百度搜索一下JDK和JRE的区别,并将结论用自己的话写在日报中。

JDK包含JRE,JDK是Java开发环境,JRE是JAVA运行环境


13.下载Maven3,并配置好环境变量。

14.下载Eclipse或者是IDEA,配置好Maven。IDEA不用配置Maven,Eclipse也分自带或者外部,推荐使用外部Maven。

15.创建一个新的maven项目

16.在src/main/java下随便创建一个java文件,clean,install.查看本地的.m2下是否成功看到有Jar包。


clean----->>install


明日计划:

接下来要学习Spring、Junit、mybatis,这几个东西毕业前粗略的看了一下,配置、注解都不是很懂,明天仔细的看看


遇到的困难:

1. 用jdbc连接数据踩上的第一个坑,数据库连接语句url要加上“&useSSL=true”才能连接,第二个坑,想要在SQL语句中使用变量,要像“+ i +”这样使用


2. 深度思考的问题基本上都要去搜索才能填上,基础知识还是太过于薄弱了,要多学习


收获:

1.知道怎么使用jdbc连接数据库并批量插入数据


2.知道了很多数据库的相关知识


返回列表 返回列表
评论

    分享到