听了一堂SQL课,受益良多,做下笔记。 SQL语句的执行计划 惭愧啊,这个名词我今天还是第一次接触,这大概已经是常识了吧呵呵。 没有太深的研究,暂时想是这样的,每一种数据库服务器在执行一条SQL语句的时候,首先都要解析这条SQL语句,每种数据库服务器的解析方式是不一样的,这样,制定出来的执行计划也就是不一样的。服务器通常都会在执行前通过某种算法(优化器)计算出很多种执行计划,然后选择其中它认为是最优的一种进行执行。 学会查看SQL语句的执行计划,有助于清晰的理解SQL语句的执行过程,特别是对SQL语句进行优化的时候,会有很大的帮助。 外连接
理解多行子查询:a.f1会和子查询结果中的每一个数据进行一次匹配循环,所以,这里值得注意的是: 1. IN和EXISTS的执行计划正好相反。用IN时,子查询为内层循环,用EXISTS时,子查询为外层循环。 2. 用IN时,子查询的返回条数不要太多,一般几十个已经够多了,如果过百的话.....呵呵..... Top-N查询
这里有个值得注意的地方就是,一定要先排序,再取Top-N。两个不要写在一起。 PS: SQL服务器从来都不保证解析出来的数据是有次序的,虽然我们不写ORDER BY查询时,每次查询结果的次序几乎都是一样的,但是,不能被表象所迷惑,这是不稳定的次序。 游标 以前理解游标只是一种变量类型,如果把它看成是一种语句执行方式的话,那么任何的SQL语句都是用游标的形式执行的。 游标变量 1. Strong 类型,即强类型。也许是我接触的比较少,还没发现有什么用,该类型游标变量必须指定游标的类型,对游标的使用进行了限制。 2. Weak类型,即弱类型。经常用,使用起来比较灵活,可以存储任意的返回类型。既然灵活,我想,也许会多少占用一些内存吧,还没深入研究。 异常 预先知道的一些异常,最好不要写在最后的异常捕获里。 比如,SELECT a INTO b FROM c. 如果a为null的话,会报no data found异常。象这样的,我们往往接受为null的情况,不想用异常来捕获,可以用两种方法来处理: 1. 使用游标 FETCH ... INTO...的时候,即使为空,也不会出异常,会继续执行下面的语句。 2. 使用PL/SQL块 BEGIN ... EXCEPTION // 进行局部异常处理 END;
欢迎来访!^.^! 本BLOG仅用于个人学习交流! 目的在于记录个人成长. 所有文字均属于个人理解. 如有错误,望多多指教!不胜感激!
Copyright © 久城