ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL 优化 概念篇 之 选择性和基数

SQL 优化 概念篇 之 选择性和基数

原创 Linux操作系统 作者:wangxiangtao 时间:2010-08-18 11:18:45 0 删除 编辑

        最近在研究 Christian  Antognini   关于 Troubleshooting Oracle  Performance 这本书,  当翻阅到后面时, 感觉到对前面的部分概念又模糊了。谈到优化,如果你概念都摸棱两可的话,就是一件很悲哀的事情了,或许你认为在真实环境中实战几次就可以理解概念了。我个人认为, 实战是加深概念理解的最直接的方法,作为一个经验尚浅的DBA,我决定在概念理解上多下工夫,因此有必要对概念作一个小小的记录 (古人云:最淡的墨水胜过最强的记忆!!)

(1)  选择性 (selectivity )  :   一个操作过滤的记录的比例, 是一个介于 0 和  1 之间的数值。

 (2)  基数 (cardinality) :     一个操作所返回的记录的条数。

 以num_rows 表示被处理的记录数, 这 cardinality  与  selectivity 之间存在以下关系

                                           cardinality =    selectivity   ×   num_rows

    对于一般的操作, 其选择性是通过 查询语句返回的记录数 除以 表中存储的记录数  得到, 但是在实际生产环境中,一般的操作是完全不能满足我们的需求的, 如果我们在语句中 使用了 group  by  和  聚合函数(eg: sum  max  min  avg), 我们返回的记录数肯定就不是我们过滤的记录数了, for  example :

      以下是我的一个测试表,表中的记录数为6  如下:

SQL> select count(*) from  book_test;
 
  COUNT(*)
----------
         6

通过 sum  聚合函数对测试表进行操作:

SQL> select  sum(price) from  book_test;
 
SUM(PRICE)
----------
       316

以上操作 我们返回行为1   其实我们的选择性应该为 6/6 = 1     而不是我们的一般算法 1/6

    谈了这么多,可能你认为,选择性是干什么的? 有用吗?  其实一个操作对应的选择性能够帮助你确定那条访问路径是最优的访问路径。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8117479/viewspace-671321/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-08-18

  • 博文量
    26
  • 访问量
    105512