随着系统的数据量逐年增加,并发量也成倍增长,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/