为何可以提升查询速度?算法
索引就是经过事先排好序,从而在查找时能够应用二分查找等高效率的算法。服务器
通常的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,两者的效率相差及其悬殊。索引
举个例子:进程
表中有一百万条数据,须要在其中寻找一条特定id的数据。若是顺序查找,平均须要查找50万条数据。而用二分法,至多不超过20次就能找到。两者的效率差了2.5万倍!class
在一个或者一些字段须要频繁用做查询条件,而且表数据较多的时候,建立索引会明显提升查询速度,由于可由全表扫描改为索引扫描。效率
(无索引时全表扫描也就是要逐条扫描所有记录,直到找完符合条件的,索引扫描能够直接定位)二叉树
无论数据表有无索引,首先在SGA的数据缓冲区中查找所须要的数据,若是数据缓冲区中没有须要的数据时,服务器进程才去读磁盘。数据
一、无索引,直接去读表数据存放的磁盘块,读到数据缓冲区中再查找须要的数据。查询
二、有索引,先读入索引表,经过索引表直接找到所需数据的物理地址,并把数据读入数据缓冲区中。di
索引有什么反作用吗?
索引是有大量数据的时候才创建的,没有大量数据反而会浪费时间,由于索引是使用二叉树创建.
当一个系统查询比较频繁,而新建,修改等操做比较少时,能够建立索引,这样查询的速度会比之前快不少,同时也带来弊端,就是新建或修改等操做时,比没有索引或没有创建覆盖索引时的要慢。
索引并非越多越好,太多索引会占用不少的索引表空间,甚至比存储一条记录更多。