关于or与in能不能利用索引的探讨Oracle认证考试

文章作者 100test 发表时间 2010:04:15 20:53:37
来源 100Test.Com百考试题网


  说说数据库方面的事情。在网上看到了几种说法,我们一起来分析一下说的到底对不对,是不是准确的,有没有歧义,会不会误导大家。

  1、 or会引起全表扫面。

  2、 in会引起全表扫描。

  3、 in会引起全表扫描,并且和or等效。

  4、 or语句使用不当会引起全表扫描。

  为了避免一些误会,同时也是缩小讨论范围,所以先解释一个名词和说一下前提条件。名词解释:全表扫描:在数据库中,对无索引的表进行查询一般称为全表扫描。全表扫描是数据库服务器用来搜寻表的每一条记录的过程,直到所有符合给定条件的记录返回为止。 引自:http://baike.baidu.com/view/2010124.htm?fr=ala0_1_1

  前提条件:

  数据库:SQL Server2000 sp4 (注意:一定要安装sp4补丁包,如果未安装任何补丁包可能执行计划会和安装sp4的不一致)

  其他数据库没有研究,所以在这里就不讨论了。

  好了,名词解释和前提条件都说好了,我们开始讨论吧。

  第四个说法是我用google搜索出来的,说的很明确。or“使用不当”才会引起全表扫描,那么使用得当的话,显然是可以避免全表扫描的。文章的例子也说的很明确。http://www.zbitedu.com/?action-viewthread-tid-39219

  在这里不得不赞扬一下google的强大,google搜索出来的结构都是明确的,而且可以把明确的排在第一位。而baidu就不管三七二十一,管你对不对、是否明确,全都收录进来,然后你自己去分析、思考吧。Bs baidu 一下。

  而前三总说法就很不明确,和算命先生的那句话有的一拼。即没有明确的说“一定”会引起全表扫描,也没有说有没有例外,含含糊糊,极易误导人。试问:您有没有下意识的加上了一个定语“一定”(or一定会引起全表扫描)呢?如果您没有加上“一定”这个定语的话,那么您有没有想过是否有反例?

  如果没有反例的话,那么就加上“一定”就是正确的,那么原话为什么不加上?

  如果有反例的话,那么原话就完全没有交代清楚。

  所以有没有反例,这就是一个很不明确,很误导人的地方。

  当然了--in和or是等效的--这句话我是认同的。in和or确实是等效的,数据库会把in转换成or的形式。


相关文章


超详细sql大全(4)Oracle认证考试
超详细sql大全(3)Oracle认证考试
超详细sql大全(2)Oracle认证考试
超详细sql大全(1)Oracle认证考试
关于or与in能不能利用索引的探讨Oracle认证考试
Oracle的SequencesOracle认证考试
oracle服务启动和关闭Oracle认证考试
OracleJOB时间间隔参考Oracle认证考试
Aix5.3下自动备份Oracle多个实例Oracle认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛