索引及其原理

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 

 

以上是关于索引及其原理的主要内容,如果未能解决你的问题,请参考以下文章

数据库索引的工作原理及其种类

LSA,pLSA原理及其代码实现

mysql索引结构及其原理

四叉树空间索引原理及其实现

四叉树空间索引原理及其实现

原理-索引