说到查询原理首先要知道ORACLE的体系结构。数据库服务由:实例、数据库文件这两部分构成。实例部分包括: SGA(System Global Area) 和PGA (Progam Global Area)以及后台进程构成。实例包括:数据文件、控制文件、日志文件、参数文件等。
当用户写入sql语句开始查询时,首先进入到PGA(PGA作用是保存连接信息和权限信息进行预处理),sql语句在PGA会生成一个唯一的HASH值(类似于身份证)。然后进入到SGA的共享池里,在共享池里如果存在一样的HASH值,则直接进行sql语句解析。如果没有相同的HASH值那就要检查 sql语法是否正确和语义是否正确是否有权限,没问题后生成一个HASH值保存在共享池里,再进行sql语句解析。sql解析的时候会优化器会分析诸如走索引还是不走索引等,最终选择一条效率最高的路线,将改执行计划保存下来。下一步就是到数据缓冲区 去取数据了。如果恰好此时缓冲区有相应的数据,则取到该数据,查询结束。如果数据缓冲区没有数据,就麻烦了得到磁盘中的数据文件去读取数据。经过磁盘IO查询时间会大大增加。查到了就返回查询结果,如果没有查到则返回空。
ORACLE数据库设计的这么复杂就是为了优化查询效率,尽量让数据库少做事!使我们调用数据库的时候更有效率。