Oracle高级编程读书笔记

2.12
fetch调用是什么鬼???
2.13
列的大小,会影响逻辑读取
逻辑读是什么鬼???
优化器:COST-BASES ORACLE FUNDAMENTALS 乔纳森.刘易斯
3.1全扫描访问方法
全表扫描会将全部的数据块读到内存中获得数据块内的行,所以全表扫描要考虑:1.有多少数据块。2.有多少行被舍弃
trunc
rpad
如果数据是有序存储,就会大多数存在同一个块内,如果是零散的存在各个数据块内,使用全表扫描可能会快于索引扫描,所以优化器可能会选择走全表扫描而不是索引扫描,所以如果数据是零散的存放的,就不应该强行指定索引扫描了
dba_tables 里面记录了行NUM_ROWS和块BLOCKS的相关信息
什么叫多块读取???
DB_file_multiblock_read_count是什么鬼???
高水位线标出了表中最后一块有数据写入的数据块
如果数据被删掉了,数据块空出来了,但是高水位线也不会变,还是在原来的位置
所以这时候进行全表扫描的时候,就会多扫描很多空白的数据块,因为全表扫描是读到高水位线为止的所有数据块

总结全表扫描会受到什么影响:
    1.多余的查询条件,一个条件就能唯一确定结果的时候多加了别的条件,就会慢
    2.数据块的个数和需要舍弃的数据量,块数多,舍弃的量大,就慢
    3.db_file_multiblock_read_count参数的设定值,小就慢
    4.高水位线,如果频繁删除数据,导致很多空块,会额外增加读取空块的时间
3.2索引扫描访问方法
    默认的索引类型是B-树索引,是什么鬼???还有别的索引???
    只需要关心列值和行编号,行编号是唯一标记列的伪列,是物理表中数据的内部地址,包含两个,一个是指向包含该行的块的数据文件的地址,一个是该行在块内的地址
    聚簇因子是什么????
    unique是什么鬼???
    什么叫谓语啊???
    首先要知道什么叫索引才行吧。。。妈的看不懂
3.3连结方法
    连结方法:嵌套循环,散列,排序-合并,笛卡尔积
    多个表进行连结的时候,两个表先连结,得到的结果再与下一个表连结,每次都是拿连结后的结果和下一个表进行连结直到所有的表都连结了
    被访问的第一张表叫驱动表,第二张叫内层表或者被驱动表
    嵌套循环连结:
        就是拿外层的一行和内层的每一行比较,直到外层的比完了
    笛卡尔联结:
        一张表的所有行与另一张表的所有行进行连联结,结果集的行数为两张表的行数的乘积
    外联结:
        不支持全外联结,一张表只能与一张表进行外连接,不能和两个或者以上的表进行外联结
第三章也要重看一遍,妈的看不懂
第4章 sql是关于合集的
思维要从面向过程转变为面向集合    
4.1以面向集合的思维方式来思考
    

转载自:https://blog.csdn.net/luobida222/article/details/84791539

You may also like...

退出移动版