索引及数据结构(不想迁移)

索引及数据结构

 

文件系统:柱面。磁道。扇区 (确定文件地址) 

索引:一种数据结构,帮助高效获取数据的数据结构

id addr 

1 0x1234

2 0x3242 直接定位

如果没有索引,则从文件中一个个读取,然后比对,所以可能会发展成全盘扫描。但如果有索引的话,可以直接读取文件地址,然后找到该数据对应的磁盘地方。获得数据。

二者其实原理一样,

索引也可能是一个文件

其他类型:

hash Map

二叉平衡树

 

二叉树:

 

红黑树:

 

 B tree

树的高度:degree

B+tree

 

 

衡量索引优劣的标尺:

i/o次数(查询次数)

mysql索引:B+tree 便于查询

 非聚集索引:

 

通过index查找到地址,找到value

 

 

 

总结:Btree和B+tree的不同点在于:Btree的每个节点(包括根节点和子节点) 都可以存储数据,而B+tree则只有叶节点(最下面的一排)可以存储数据
聚集索引和非聚集索引的区别:myisam生成三个文件,又MYD和,MYI以及表定义文件,这个索引的工作原理是通过MYI的index找到MYD中的data数据,间接索引。
而INNODB聚集索引就只生成两个文件夹。一个idb是表定义文件,一个是数据和下标在一起的文件,这个就是聚集索引。因为索引下标以及数据都在一起。
还有:Btree以及B+tree是按照阿拉伯数字顺序或者是a、b、c、d这种数据进行排列,因此按一定顺序查询特别方便
 
 
 
二分查找法的实际应用感悟
//二分法如果用于两个都是按照相同项来进行同步升序(或者降序),此时随便用哪一个作为循环外体
//如果两个判断项不同步,那么最好外体用无序,内部按照具体需要的顺序来(所要求的那个项),但其实如果反过来也可以
//optionList 为升序排列
//最重要的一点是两个循环体之间的对应关系,谁对谁是一对多还是多对一或者一对一

//如果是多对一的多的一方,那么应该循环多的一方,一的一方在循环体内,并且一的一方需要按照相等的项进行排序才可以(多应该去一的里面找,循环一)
public SurveyItemOption commonBinary(List<SurveyItemOption> optionList,SurveyItemWrapper wrapper){
        Long realValue = wrapper.getItemId();
        int left=0,right=optionList.size()-1;
        while(left<=right){
            int middle=(left+right)/2;
            if(optionList.get(middle).getItemId() == wrapper.getItemId()) return optionList.get(middle);
            if(realValue > optionList.get(middle).getItemId())  left=middle+1;
            else right=middle-1;
        }

    return null;
}
冒泡排序:
//冒泡排序
public int[] bubbleSort(int[] arr){
    int temp;
    for ( int i =arr.length-1; i >= 0 ; i-- ) {
        for ( int j = 0; j < i ; j++ ) {
            if(arr[j]>arr[j+1]){
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}

快速排序:
//快速排序
public List<Integer> quickSort(List<Integer> list){
    if(list.size()<2) return list;
    final int index = list.get(0);
    final ArrayList<Integer> begin = new ArrayList<Integer>();
    final ArrayList<Integer> end = new ArrayList<Integer>();
    int choice;
    for(int i=1;i<list.size();i++){
        choice = list.get(i);
        if(choice<index) begin.add(choice);
        else{
            end.add(choice);
        }
    }

    ArrayList resultList = (ArrayList) quickSort(begin);
    resultList.add(index);
    resultList.addAll(quickSort(end));
    return resultList;
}
 
 
www.hnhyxds.cn 网站
 
 https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html 

 

 
 
 
 
 
 
 
posted @ 2017-10-23 22:27 塑料味的美年达 阅读(...) 评论(...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值