索引及其原理
Posted 塑料味的美年达
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引及其原理相关的知识,希望对你有一定的参考价值。
文件系统:柱面。磁道。扇区 (确定文件地址)
索引:一种数据结构,帮助高效获取数据的数据结构
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
以上是关于索引及其原理的主要内容,如果未能解决你的问题,请参考以下文章