`
java-lazypig
  • 浏览: 6632 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类

SQL 查询优化之索引扫描与全表扫描漫谈

SQL 
阅读更多

SQL 查询优化之索引扫描与全表扫描漫谈

阅读对象: 初级用户

索引扫描---也许你有过这样的经历, 某日应邀第一次去朋友家, 朋友告诉你是开心家园132栋1102, 之后你就去了开心家园, 接下来你要从该小区中寻找132栋, 但是小区很大, 你可能会凭经验楼栋号是连续分布的, 依照进开心家园大门的几栋楼栋号的排列顺序往前找, 也许运气好, 你很容易就找到了, 但是有的小区楼栋号分布并不连续, 这个时候在你觉得下一栋就是你要找的楼栋号时, 走近一看发现却不是,这时你不得不再次花费时间来寻找. 那如何快速的找到你的楼栋号所处的位置呢? 物业已经为你制作了一个楼栋号分布图竖在大门口, 这时你只需要查看这个地图就能轻易的找到你要的楼栋号在该小区的位置, 接下来就直接奔往那个位置即可. 这种情况运用到数据库查询中, 我们可以发现, 整个小区相当于一个数据表, 各个楼栋是这个数据表中的数据, 这里我们使用到的楼栋号分布图就相当于这个数据表的索引, 因此当我们查找数据表中指定某一个数据时, 使用索引查找到数据所在的位置(ROWID), 然后直接根据位置就能够得到你要的数据了. 这就是索引在查询中加快查询速度的使用.

全表扫描---那是不是使用索引查找数据就一定快了呢? 某日, 你被指派为水表抄表员, 你需要对该小区200栋楼的居民用户抄水表读数, 你知道一共从1到200号, 但我想你一定不会根据楼栋号分布图先查看第1栋的位置, 然后跑到第1栋的楼号去抄完表, 再根据第2号楼的位置到第2个楼去抄表, 你一定是根据小区的分布, 从第一排的楼栋的第一个楼号开始连续的从一栋抄完再到紧挨着的那一栋(楼栋号可能并不连续),第一排结束到第二排 这样顺序走完一遍即可. 这对于SQL查询就相当于全表扫描, 像这种查询数据表中全部(或者说大部分)数据的时候, 走全表扫描比走索引更加有效.
分享到:
评论
1 楼 完善自我 2012-08-17  
举例很形象

相关推荐

Global site tag (gtag.js) - Google Analytics