关于索引

索引思路mysql

若是有一大堆数据让你去检索其中某一条,好比学生成绩单,按照学号去查考试成绩,最多见的思路是从头查到尾,可是若是数据量很大,固然查起来很慢。可是若是这些数据排好顺序,你还须要从头查到尾么?二分法查起来最快,先查中间,而后看学号是大仍是小,而后递次往前或日后二分查找,理解这一点,数据索引对查询效率的影响就豁然开朗了。算法

在innodb中,是按照主键创建的聚簇索引,所以基本上来讲主键是惟一的,不为空,并且索引的结构自己是有序的,平衡树。若是你对于一个没有辅助索引的行进行查找,是须要全表扫描,不然能够创建一个辅助索引,按照该列进行了基于B+树的排序。所以当你再去定位的时候,可以再也不仅仅是经过扫描全表,而是根据二叉树的方式去查找,O(N)与O(logN)的区别,所以可以更快的定位到了须要查询的主键,而后根据主键再去定位到了具体的行。sql

总结:索引的做用就是改变了查找的方式,全表扫描是最慢的方式。数据库

mysql 全文索引缓存

只能在MyISam的数据库表中建立的。一种特殊的索引,它会把某个数据表的某个数据列出现过的全部单词生成一份清单。排序

where match(column1,column2) against('word1 word2 word3')>0.001 match ... against 把column1,column2数据列中至少包含word1,word2,word3三个单词之一的数据记录查找到索引

innodb中的hash算法内存

  1. 例子:128G的内存中,如何可以快速的找到某一个被缓存的额页。虽然一方面内存的查询速度很快,可是也不能每次都是遍历整个内存去查找,此时的字典操做只须要O(1)的速度就可以查到须要的数据。于是利用到了直接寻址的表
  2. 通常用连接法来解决hash存在的碰撞问题。也是由于碰撞问题,形成了hash的效率下降
  3. hash的索引仅仅只能知足“=”,“in","<=>"

因为 Hash 索引比较的是进行 Hash 运算以后的 Hash 值,因此它只能用于等值的过滤,不能用于基于范围的过滤,由于通过相应的 Hash 算法处理以后的 Hash 值的大小关系,并不能保证和Hash运算前彻底同样。

   4. Hash 索引没法被用来避免数据的排序操做。

因为 Hash 索引中存放的是通过 Hash 计算以后的 Hash 值,并且Hash值的大小关系并不必定和 Hash 运算前的键值彻底同样,因此数据库没法利用索引的数据来避免任何排序运算;

   5. Hash 索引不能利用部分索引键查询。

对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一块儿计算 Hash 值,而不是单独计算 Hash 值,因此经过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也没法被利用。

   6. Hash 索引在任什么时候候都不能避免表扫描。hash

相关文章
相关标签/搜索