>  기사  >  데이터 베이스  >  自作聪明的开发

自作聪明的开发

WBOY
WBOY원래의
2016-06-07 15:58:331019검색

近日查看数据库运行较长的语句,发现我们这边的开发人员真是厉害,不懂装懂的本领真高。 开发以为只要走索引就是快的,而且刚好知道index hint可以强制走索引,所以就用上了。可是走的是bitmap index full scan,把整个索引都扫描了,然后根据索引的位图转化

近日查看数据库运行较长的语句,发现我们这边的开发人员真是厉害,不懂装懂的本领真高。

开发以为只要走索引就是快的,而且刚好知道index hint可以强制走索引,所以就用上了。可是走的是bitmap index full scan,把整个索引都扫描了,然后根据索引的位图转化(bitmap conversion to rowids)成rowid,再根据索引的rowid和表的rowid一一对应,从表中取得数据(table access by index rowid)。

既然是从索引中的所有rowid找到表中的所有的数据,为啥不直接扫描整个表,直接扫描整个表不是更快吗?不要当oracle是傻的,我把index hint去掉之后,走得是全表扫描,这就对了嘛。

读索引是单块读,回表也是单块读。一次的单块读和多块读时间上是差不多的,显然多块读一次扫描的块数更多。

至于优化的话就简单了,去掉index hint就可以了,如果表大的话就加并行就ok了。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.