随着系统的数据量逐年增加,并发量也成倍增长,SQL 性能越来越成为 IT 系统设计和开发时首要考虑的问题之一。SQL 性能问题已经逐步发展成为数据库性能的首要问题,80% 的数据库性能问题都是因 SQL 而导致。面对日益增多的 SQL 性能问题,如何下手以及如何提前审核已经成为越来越多的 IT 从业者必须要考虑的问题。

基数(CARDINALITY)

某个列唯一键(Distinct Keys)的数量叫做基数。比如性别列,该列有男女之分,所以这一列的基数是 2。主键列的基数等于表的总行数。基数的高低影响列的数据分布。

以测试表 TEST 为例,owner 列和 object_id 列的基数分别如下所示:

SQL> show user;
User is "SCOTT"

SQL> create table test as select * from dba_objects;

Table created

SQL> select count(distinct owner), count(distinct object_id), count(*) from test;

COUNT(DISTINCTOWNER) COUNT(DISTINCTOBJECT_ID)   COUNT(*)
-------------------- ------------------------ ----------
                  27                    86836      86836

TEST 表的总行数为 86836,owner 列的基数为 27,说明 owner 列含有大量重复记录;object_id 列的基数等于总行数,说明 object_id 列没有重复值,相当于主键。

owner 列的数据分布如下:


选择性(SELECTIVITY)

直方图(HISTOGRAM)

回表

聚簇因子

表与表之间的关系

参考资料

《SQL 优化核心思想 - 罗炳森》

原创文章,转载请注明出处:http://www.opcoder.cn/article/42/