发表于: 2017-10-12 22:49:35
1 625
今天完成的事情:
1.小课堂——mysql索引
(1)概念
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
不建立索引的话,MySQL执行查询会从数据表的第一行开始查直到查询想要的数据结果。
(2)索引分类
<p>索引的分类--单列来区分</p>
<p>1.普通索引--这是最基本的索引,它没有任何限制</p>
<p>2.唯一索引--索引列的值必须唯一,但允许有空值;如果是组合索引,则列值的组合必须唯一</p>
<p>3.主键索引--列值唯一,非空,一个数据表只能有一个主键</p>
(3)数据结构
<p>索引的分类(存储结构)(InnoDB)</p>
<p>B-tree</p>
<p>mysql数据库中主键、唯一、普通、全文都是采用b-tree数据结构 </p>
<p>在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,
这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,
因此InnoDB表数据文件本身就是主索引,InooDB必须要求主键,没有显示声明,系统会默认添加</p>
<p>除了主键索,其它都是辅助索引,辅助索引也会包含主键列,因此主键列最好不要设置太大的列值
因为是聚簇索引方式,聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。主键最好是单调的。
</p>
(4)哈希索引
<p>hash索引</p>
<p>简单地说,哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B树那样从根节点到叶子节点逐级查找,
只需一次哈希算法即可立刻定位到相应的位置,速度非常快</p>
(5)建索引的优势
1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性.<br>
2.建立索引可以大大提高检索的数据,以及减少表的检索行数<br>
3.在表连接的连接条件 可以加速表与表直接的相连<br>
4.在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)<br/>
5.建立索引,在查询中使用索引 可以提高性能<br/>
2.学习File类基本知识
(1)
RandomAccessFile.java 文件内容的访问,读写操作类
可以随机访问文件,可以访问文件的任意位置
java文件模型
在硬盘上文件是byte 存储的,是集合
打开方式
rw 读写
r 只读
随机访问,存在文件指针,打开是文件指针在开头,pointer=0
写方法
raf.write(int ) ---->每次只写一个字节byte,指针指向下一个位置
(4)读取文件
int b=raf.read() ----->读一个字节
(5)文件读写完之后要关闭
*****************************************************************
IO流 输入/输出流
字符流和字节流
1.字节流
抽象类 inputstream/ outputstream
inputstream 抽象了程序读取数据的方式
outputstream 抽象了程序写出数据的方式
2.EOF =End 读到-1就结束了
3.输入流
基本方法主要是读取,掌握
int b=in.read();读取一个字节,无符号填充到int的低8位,读到-1就EOF
in.read(byte[] buf) 读取数据填充到字节数组buf
in.read(byte[] buf,int start,int size)//读取数据到字节数组buf
从buf的start位置开始,
存放size长度的数据
4.输出流基本方法
out.write(int b) 写出一个byte到流,b的低8位 写入到流
out.write(byte[] buf)
out.write(byte[] buf,int start,int size)
5.IO流子类
对文件读操作
FileInputStrem
---------------------------------------------------------------------------------------------
编写工具类:读取文件内容,输出16进制字节码
package io;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 读取指定文件内容,16进制输出字节码
*/
public class IOUtil {
//构造
public static void printHexBybyte(String fileName) throws IOException {
//把文件当做字节流进行读取操作
FileInputStream in=new FileInputStream(fileName);
int b;
int i=1;
while((b=in.read())!=-1){
if(b<=0xf){
//单位补0
System.out.print("0");
}
System.out.print(Integer.toHexString(b)+" ");
if(i++%10==0){
System.out.println();
}
}
in.close();}
//把文件
public static void printHexByByteArray(String fileName)throws IOException{
FileInputStream in=new FileInputStream(fileName);
byte[] buf=new byte[20*1024];
//从文件中读取字节数放到buf数组中,返回的是读到的字节数
int bytes=in.read(buf,0,buf.length);
int j=1;
for (int i = 0; i < bytes; i++) {
if(buf[i]<=0xf){
System.out.print("0");
}
System.out.print(Integer.toHexString(buf[i])+" ");
if(j++%10==0){
System.out.println();
}
}
}
}
明天的计划:
1.继续先学习java基本知识
遇到的问题:
暂无
总结:
1.代码练习量还是不够,自己在写东西的时候总是想参考别人的代码来写。
评论