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

索引及数据结构

 

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

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

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 塑料味的美年达 阅读(...) 评论(...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL索引背后的数据结构是B树(B-tree)或B+树(B+tree),这是一种多路平衡查找树,能够支持快速的查找、插入和删除操作。B树和B+树的区别在于B+树只在叶子节点存储数据,而B树在所有节点都存储数据。这使得B+树更适合于范围查询和排序操作。 算法原理是基于二分查找的思,将数据按照索引字段的值进行排序,然后将数据分成多个节点,每个节点都有一个索引值。通过比较要查找的值和节点的索引值,可以快速定位到包含要查找数据的节点,然后在节点中进行查找操作。这种算法能够在O(log n)的时间复杂度内完成查找操作,大大提高了查询效率。 ### 回答2: MySQL索引是关系型数据库管理系统中最重要的优化功能之一,通过索引可以快速查找和检索数据库中的数据。在MySQL中,索引背后的数据结构和算法原理是B树(B-tree)。 B树是经典的数据结构,可以用于实现文件系统、数据库索引等应用。B树的核心思是将数据分层存储,通过多级索引加速查找。B树可以同时支持插入、删除、查找等操作,并且能够自动维护平衡性。B树在数据库中的应用可以提高查询效率、降低磁盘访问频率,缩短数据访问时间。 在MySQL中,常见的索引类型包括B-tree索引、哈希索引和全文索引。B-tree索引是最常用的索引类型,它能够处理范围查找、和查找等高级查询,以及支持多列组合索引。B-tree索引数据结构如下: B-tree索引由多个节点组成,其中根节点是索引的入口,叶子节点存储实际的数据信息。每个节点包含一个关键字和指向子节点的指针。在B-tree中,每个节点的关键字之间都是有序的,这使得B-tree可以支持高效的查找和范围查找操作。另外,B-tree索引还可以自动维护平衡性,保持查询效率的稳定性。 总之,MySQL索引背后的数据结构和算法原理是B-tree。B-tree是一种高效可靠的存储结构,可以降低磁盘I/O次数,提高数据库的查询效率。对于开发者来说,理解和掌握B-tree的基本原理和使用方法,对于提高数据库的性能和稳定性有着极为重要的意义。 ### 回答3: MySQL是一种关系型数据库管理系统,设计用于大型企业级应用程序。MySQL索引是优化查询性能的关键,可以大幅度提高查询效率。索引的背后是一些重要的数据结构和算法原理。 MySQL索引是一种帮助管理系统中数据的数据结构。在MySQL中,索引使用B-树或B+树这两种数据结构存储索引数据。这些树结构的优点在于,它们被优化为具有良好的时间复杂度,能够很快地找到所需数据。索引还可以在内存中被缓存,以便进一步提高查询性能。 B树是一种自平衡树形结构,支持快速的查找、插入和删除操作。在MySQL中,B树主要用于存储索引数据。在一个B树中,每个节点包含多个关键字和对应的指针。这些指针指向其他节点或数据的位置。在一个B树中,每个节点都包含一个范围,即这个节点所有数据的关键字范围。每个节点都可以在O(log n)时间内被查找,因此B树的时间复杂度为O(log n)。 B+树是在B树的基础上进一步提高的。B+树中,每个非叶子节点只包含关键字,而不包含实际的数据。数据全部都存储在叶子节点上。这种方法使得叶子节点有更多的空间来存储数据,从而提高了数据的存储效率。 B+树也能够快速地找到所需数据,因此也是建立MySQL索引的最佳数据结构之一。 另外,MySQL索引还使用有序集合来存储数据,以便提高数据访问效率。有序集合是一个无序元素的集合,但是在访问元素时可以按照给定的顺序进行访问。使用有序集合为MySQL索引提供了一种更快、更高效的访问方式,提高了查询的效率。 综上所述,MySQL索引背后的数据结构和算法原理包括B树、B+树和有序集合等。这些数据结构和算法都被优化为具有良好的时间复杂度和查询效率,以提高MySQL的查询性能。虽然MySQL索引的设计可能相对复杂,但是它们提供重要的优化功能,可以大幅度提高查询性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值