发表于: 2018-03-11 21:47:33

1 819


今日完成:

1.在数据库内插入10条数据,并使用索引和无索引查询,比较其查询效率:

插入数据:

创建索引(普通索引):

或者(创建/修改):

F:https://www.cnblogs.com/a-du/p/7117837.html

    http://www.jb51.net/article/73372.htm 

查看索引并查询:

数据较少,有无索引并无明显差别。大量数据下索引可以有效的提高查询效率,但是索引过多也会使某些情况下查询效率下降。索引加快了检索的速度,但是减慢了插入和删除的速度,同时还减慢了更新被索引的数据列中的值的速度。

资料:https://zhidao.baidu.com/question/1667611163275624027.html

http://www.jb51.net/article/89450.htm


2.深度思考:

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

- 因为date数据是以“yyyy-mm-dd”的固定格式储存,更为严谨,但相对long而言操作会繁琐,需要数据转换或者比较的时候没有long类型效率高(视情况,比如时间转换,数据运算)

- long类型可以满足date类型的存储需求,而且更容易操作。

- 感觉像是varchar类型也可以用来储存date类型,只是需要前台加以规范。但是数据来说没有date规范。


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

- 自增id最主要的就是删除的时候位置不会连续,如果有需求的话这点很麻烦,而且数据规律容易被发现。

- 数据量大的话可能会有字段数值不够的情况,数据迁移的时候大数据容易出问题,特别是id主键自增。

- 自增是主键下的,所以在有其它可以做主键的情况下就可以不使用id自增。


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

- DB中的索引应该类似于目录,它是建立在表数据(数据结构)之上。索引也是数据或者说数据类型,它能引导数据更快的查询。比如确定需要查询的数据范围,可以过滤掉哪些东西等。

  索引示意图:

 F:http://imysql.com/2017/08/08/quick-deep-into-mysql-index.shtml

 创建索引:

  普通索引 CREATE INDEX 索引名称 ON 表名称 (列名称)

  唯一索引 CREATE UNIQUE 索引名称 ON 表名称 (列名称)

  组合索引 CREATE INDEX 索引名称 ON 表名称 (列名称,列名称,列名称)

   and(创建/修改):

   PRIMARY KEY(主键索引)     ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 

   UNIQUE(唯一索引)                 ALTER TABLE `table_name` ADD UNIQUE (`column`)

   INDEX(普通索引)                    ALTER TABLE `table_name` ADD INDEX index_name (`column`)

   FULLTEXT(全文索引)                ALTER TABLE `table_name` ADD FULLTEXT ( `column` )

   组合索引                                ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3` ) 


- 如果有自增列做主键,相对完全没索引的情况,写入速度约提升 3.11%;如果有自增列做主键,并且二级索引,相对完全没索引的情况,写入速度约降低 27.37%;

- 应该根据电脑的负载和表数据结构来确定多大数据量下建索引,索引也会占据空间,应该10w以上的数据量使用索引会有明显的性能差别。但是索引也会造成效率下  降,如果CPU负载持续很高,但内存和IO   都还好的话,一般都是索引问题。

  F:http://imysql.com/2014/06/04/mysql-optimization-case-index-lead-to-high-cpu-load.shtml

- 主键一般都应该有索引。外链的数据列,查询条件经常用到的数据列,小字段的数据列都可以建立索引,频繁使用的数据也需要建立索引,但是不能过多。索引的建立应该有明显的利弊分析,过多的索引会   加大负载,降低性能。


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

- 唯一索引和普通索引的区别就是索引列的值必须唯一,不允许具有索引值相同的行,从而禁止重复的索引或键值,但允许有空值。还有主键索引:一种特殊的唯一索引,不允许有空值。

- 如果需要数据列的每个值都是唯一的时候可以创建唯一索引。唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。


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

- 如果对学院QQ号做了一个唯一索引在插入数据的时候如果已经存在这个QQ号则会报错,无法插入。


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

- create_at是创建的时候直接赋值,是数据创建的时间;update_at是修改的时候赋值,是数据修改的时间。不应该开放外部调用接口。


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

- ……猛一看修真类型有点懵,类型可以直接储存int,以数字代替不同类型,可以在表内注释。类似于表格里“男/女/其它”可以储存为“1/2/0”。


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

- 可以在创建的时候在数据类型后面限制:alter table tableName add columnName varchar(30)  。

- varchar是变长字节,所占空间为字符串实际长度加1,最大长度不能超过65335个字节。不同的编码长度在varchar储存中也有不同的占用空间。字符类型若为gbk,每个字符最多占2个字节,字符类型若为utf8,每个字符最多占3个字节。

- 和varchar不同的是Text不可以有默认值最大长度65535个字(2^16-1),LongText则是最大长度4294967295个字节 (2^32-1)。


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

- 可以通过limit查询所需要的分页数据:

查询第1条到第10条的数据的sql:select * from table [条件] limit 0,10;   ->对应我们的需求就是查询第一页的数据:select * from table [条件] limit (1-1)*10,10;

查询第10条到第20条的数据的sql:select * from table [条件] limit 10,20;  ->对应我们的需求就是查询第二页的数据:select * from table [条件] limit (2-1)*10,10;

查询第20条到第30条的数据的sql:select * from table [条件] limit 20,30;  ->对应我们的需求就是查询第三页的数据:select * from table [条件] limit (3-1)*10,10;

select * from table [条件] limit (start-1)*limit,limit; 其中start是页码,limit是每页显示的条数。


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

- 可以啊,为什么不可以用。任何东西都可以尝试,但是要想清楚后果。 *是通配符,可以查询出所有的数据,所以一般情况下如果数据量大的话是不用的,而且不是需求的话会浪费资源查询不必要的数据。



3.下载java 7 安装并且配置环境变量

环境变量:

环境变量:

JAVA_HOME 

值:D:\Program Files\Java\jdk1.7.0_80

CLASS_PATH

值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;

PATH

值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

或:D:\Program Files\Java\jdk1.7.0_80\bin;D:\Program Files\Java\jdk1.7.0_80\jre\bin;

(java -version可以使用,但是javac无法识别,把PATH的%JAVA_HOME%改为安装地址即可,可以改后再改回%JAVA_HOME%)

测试:



jre和jdk的区别:

JRE:Java Runtime Environment
JDK:Java Development Kit 

jre是java的运行环境、java运行类库,包含java虚拟机,java基础类库。是java程序运行时所必须的环境集合。

jdk是整个java的核心、java的开发工具包,具备开发功能,包含jre的同时还包含了编译java源码的编译器javac,虚拟机(JVM),java工具,基础类库,编译时所需要用到的各种命令。是程序员编写java程序所需要的核心。


明日计划:

1.调试配置java7。了解开发java需要的环境、背景、软件、基础。

2.下载安装Maven3,配置环境。下载安装Eclipse,配置好Maven。

3.创建第一个练习项目。根据任务一的目标继续。


收获与问题:

1.数据库的类型了解了。进一步加深数据库的熟悉度。数据的保存与空间占用等。优化数据结构挺重要的。

2.主要是数据库的索引,查询,还有db的一些相关知识。只是基本上都在用mysql,oracle数据库是否类似?

3.java的安装,配置环境变量时javac出现问题,已经解决。接下来是开发工具的安装,然后开始初级的基础练习。继续做任务。



返回列表 返回列表
评论

    分享到