发表于: 2018-06-09 23:53:41

2 1028


  • 11.查看深度思考中Mysql相关的一些问题,将自己思考的结果写在日报中,并查阅之前师兄的日报,看看是否有合自己思路接近或者是完全不一致的地方。
5.为什么DB的设计中要使用Long来替换掉Date类型?
将date类型转换为long类型
1.有利于计算时间差
2.方便java与数据库之间的传输
5.编码实战
可以通过long login_at = System.currentTimeMillis()获得当前时间的long类型
 也可以通过Date date1=new Date()来获得当前时间,再用long time=date1.getTime()将其转化为long类型。
然后在数据库中的相应字段设置类型为bigint即可,在数据库中取得数据后,可以在转为相应的时间格式。
6.自增ID有什么坏处?什么样的场景下不使用自增ID?
自增主键
这种方式是使用数据库提供的自增数值型字段作为自增主键,它的优点是:
(1)数据库自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利;
(2)数字型,占用空间小,易排序,在程序中传递也方便;
(3)如果通过非系统增加记录时,可以不用指定该字段,不用担心主键重复问题。
其实它的缺点也就是来自其优点,缺点如下:
(1)因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其它系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的)。特别是在新系统上线时,新旧系统并行存在,并且是异库异构的数据库的情况下,需要双向同步时,自增主键将是你的噩梦;
(2)在系统集成或割接时,如果新旧系统主键不同是数字型就会导致修改主键数据类型,这也会导致其它有外键关联的表的修改,后果同样很严重;
(3)若系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个字符标识(例如“o”,old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。
(不知道对不对)
7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname='css',如果要拿这条数据的话需要些的sql是 SELECT * FROM award WHERE nickname = 'css'
一般情况下,在没有建立索引的时候,mysql需要扫描全表及扫描10W条数据找这条数据,如果我在nickname上建立索引,那么mysql只需要扫描一行数据及为我们找到这条nickname='css'的数据,是不是感觉性能提升了好多咧....
1使用索引的优点
1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性.
2.建立索引可以大大提高检索的数据,以及减少表的检索行数
3.在表连接的连接条件 可以加速表与表直接的相连 
4.在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)
5.建立索引,在查询中使用索引 可以提高性能
 
2使用索引的缺点
1.在创建索引和维护索引 会耗费时间,随着数据量的增加而增加
2.索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间
3.当对表的数据进行 INSERT,UPDATE,DELETE 的时候,索引也要动态的维护,这样就会降低数据的维护速度,(建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快)。
(3)使用索引需要注意的地方
在建立索引的时候应该考虑索引应该建立在数据库表中的某些列上面 哪一些索引需要建立,哪一些所以是多余的.
一般来说,
1.在经常需要搜索的列上,可以加快索引的速度
2.主键列上可以确保列的唯一性
3.在表与表的而连接条件上加上索引,可以加快连接查询的速度
4.在经常需要排序(order by),分组(group by)和的distinct 列上加索引 可以加快排序查询的时间,  (单独order by 用不了索引,索引考虑加where 或加limit)
5.在一些where 之后的 < <= > >= BETWEEN IN 以及某个情况下的like 建立字段的索引(B-TREE)
6.like语句的 如果你对nickname字段建立了一个索引.当查询的时候的语句是 nickname lick '%ABC%' 那么这个索引讲不会起到作用.而nickname lick 'ABC%' 那么将可以用到索引
7.索引不会包含NULL列,如果列中包含NULL值都将不会被包含在索引中,复合索引中如果有一列含有NULL值那么这个组合索引都将失效,一般需要给默认值0或者 ' '字符串
8.使用短索引,如果你的一个字段是Char(32)或者int(32),在创建索引的时候指定前缀长度 比如前10个字符 (前提是多数值是唯一的..)那么短索引可以提高查询速度,并且可以减少磁盘的空间,也可以减少I/0操作.
9.不要在列上进行运算,这样会使得mysql索引失效,也会进行全表扫描
10.选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中 占用的空间很少,处理起来更快
(4)什么情况下不创建索引
1.查询中很少使用到的列 不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求.
2.很少数据的列也不应该建立索引,比如 一个性别字段 0或者1,在查询中,结果集的数据占了表中数据行的比例比较大,mysql需要扫描的行数很多,增加索引,并不能提高效率
3.定义为text和image和bit数据类型的列不应该增加索引,
4.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系
8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
  唯一索引,与普通索引类似,但是不同的是唯一索引要求所有的类的值是唯一的,这一点和主键索引一样.但是他允许有空值,
什么时候需要建唯一索引。..........
9.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
但是不同的是唯一索引要求所有的类的值是唯一的,是要判断吧.....
10.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
CreateAt,在第一次插入数据的时候赋值,以后不再改变
UpdateAt,每次对中数据做修改时都应该改变
所以只有UpdateAt开放给外部调用的接口.
11.修真类型应该是直接存储Varchar,还是应该存储int?
从字段类型的执行效率上,int最高,varchar最低。
状态类型字段,使用char或者varchar是不可取的,int类型更容易建立索引和进行检索,毕竟数字类型是数据库检索的基础,char类型的毕竟需要经过转换,而varchar就更复杂了,其排序不仅需要转换和计算,还需要访问和遵循数据库的排序规则(实际上char也需要排序规则),而消耗的资源也更大。
因此,通常在数据库设计中,都是尽量使用int类型字段而不是字符类型字段,这在大型和超大型数据库的优化中,有明显的性能差异。
数据库为什么要规定数据类型?
为什么要规定int还是tinyint char varchar,意义是什么?
因为我们的数据都是在磁盘,以前在磁带上存储,空间都是有限的,每一个有意义的数据,占用的存储空间越小越好,所以根据具体情况来规定数据类型,1可以节省空间,2便于存储,3便于数据库的管理!
修真类型是否是经常搜索,
修真类型就几个也不可能建立索引.
我认为应该是int,其实tinyint 就够了
12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
.经常变化的字段用varchar;知道固定长度的用char;尽量用varchar;超过255字节的只能用varchar或者text;能用varchar的地方不用text;(效率上: char>varchar>text)。
能够用数字类型的字段尽量选择数字类型而不用字符串类型的(电话号码),这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了
13.怎么进行分页数据的查询,如何判断是否有下一页?
 分页原理是什么?
 数据分页需要以下几个条件:
 1. 参与分页的总条数 【msg_count】 ,该值通过数据库查询可以获取到;
 2. 每页显示的条数【pagesize】 ,这个数值由自己定义;
 3. 当前页的页码数 【page】,该数值通过地址栏传递和接收;
 4. 可以通过以上资料计算出总页数 【pagecount】 ,此处需要借助ceil();
  【pagecount = ceil(msg_count/pagesize);】
 5. 数据库查询借助sql语句中的【limit】来实现数据的变化:
  例如:
  select * from 表名 where 条件 limit startnum , pagesize;
  而startnum = (page-1)*pagesize;
14.为什么不可以用Select * from table?
效率问题,mysql优化


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

jre是java运行环境,jdk包括jre,jdk=jre+javak开发工具


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



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


  • 15.创建一个新的maven项目


18.学习Junit并尝试写自己的第一个单元测试

我还没试这个链接的方式

https://mp.weixin.qq.com/s/4KZWTDN_2v2h54NQ7JHLCw

1,创建一个javaee项目
参考idea创建javaee项目
2,下载jar包
junit需要的jar包有
前两个单元测试用,最后一个是连接mysql用的
3,导入jar包
我在与src平级的目录下创建了个lib目录,里面放jar包
记得将jar包添加到项目中
4左键项目新建一个test文件夹放测试类Test Source Root
5,具体测试代码.........
/**
* Copyright (C), 2015-2018, XXX有限公司
* FileName: jdbcTest
* Author:   Administrator
* Date:     2018/6/9 13:22
* Description: 233
* History:
* <author>          <time>          <version>          <desc>
* 作者姓名           修改时间           版本号              描述
*/
import com.mysql.jdbc.Driver;
import org.junit.Test;
import java.sql.*;
/**
* 〈一句话功能简述〉<br>
* 〈233〉
*
* @author Administrator
* @create 2018/6/9
* @since 1.0.0
*/
public class jdbcTest {
@Test
public void demo(){
System.out.print("2333");
}
@Test
public void demo1() throws SQLException {
DriverManager.registerDriver(new Driver());
String url = "jdbc:mysql://localhost:3307/xiuzhen";
String user = "root";
String password = "root";
//获得连接
Connection connection = DriverManager.getConnection(url, user, password);
//创建执行sql语句对象
Statement statement = connection.createStatement();
//执行sql,处理结果
String sql = "select *from xz_student";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
System.out.println(resultSet.getObject(1));
System.out.println(resultSet.getObject(2));
System.out.println(resultSet.getObject(3));
System.out.println(resultSet.getObject(4));
}
//关闭资源
if(resultSet != null){
resultSet.close();
}
if(statement  != null){
statement .close();
}
if(connection != null){
connection.close();
}
}
}
完........


明天的计划,看看spring,springjdbc,mybatis

遇到的问题..idea用的不熟练....多百度吧.

收获.........



返回列表 返回列表
评论

    分享到