用了几年的Oracle,对一些日常的开发和优化技术已经所有耳闻,简单罗列一些
1:单表的查询性能
要看数据的量,查询条件,是否命中主键、索引;如果数据量在几百万,几乎不需要考虑;
如果几千万到亿的数据量,如果不走索引,查询的性能可想而知;
当然查询记录的数据量跟整表的数据量对比,如果查询的结果跟总量对比比较大时,避免全部扫描
如果几乎相当,全部扫描未必是效率低下。
2:多表的查询性能
需要考虑更多因素
全部扫描访问方式【全表扫描,或者快速全索引扫描】
索引扫描访问方式
关注:oracle常用的索引类型
B树索引:适合数据重复率低的列
位图索引:适合数据重复率高的列
索引扫描机制:
索引范围扫描,索引唯一扫描,索引全扫描,索引跳跃扫描,索引快速全扫描。
当然索引的扫描离不开索引统计信息:聚簇因子(Clustering factor)的统计信息用来帮助优化器生成使用索引的成本信息。
需要识别索引扫描的场景:
索引唯一扫描:当谓词中包含使用UNIQUE或PRIMARY KEY索引作为条件的时候,就会选用索引唯一扫描。
索引范围扫描:当谓词中返回一定范围数据的条件时,就会选用索引范围扫描---比如<,>,LIKE,BETWEEN
索引全扫描:当没有谓词但是所需获取列的列表可以通过其中一列的索引来获得,谓词中包含一个位于索引中非引导列上的条件。