当前位置:  数据库>其它
本页文章导读:
    ▪(3-1)聚簇因子(CLUSTERING_FACTOR )      大家知道数据表中的数据都是无序的存在库中,当我们在对数据进行检索的时候,查找起来很是耗费资源,于是我们就需要为表创建索引,索引的作用就是把表中的数据按照一定的顺序排列保.........
    ▪MongoDB 安装配置      MongoDB 是一个高性能,开源,无模式的文档型数据库,采用C++开发,是当前NoSql数据库中比较热门的一种,在许多场景下可用于替代传统的关系型数据库或键/值存储方式。1,特点和功能1) 特.........
    ▪CentOS 6.3 Minimal 源码安装 Postgresql 9.2.2      # 修改防火墙设置,打开5432端口vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT# 重启防火墙使新设置生效service iptables restart# 新增用户组groupadd postgres# 新增用户use.........

[1](3-1)聚簇因子(CLUSTERING_FACTOR )
    来源: 互联网  发布时间: 2013-11-07

大家知道数据表中的数据都是无序的存在库中,当我们在对数据进行检索的时候,查找起来很是耗费资源,于是我们就需要为表创建索引,索引的作用就是把表中的数据按照一定的顺序排列保存起来,于是就出现了一个问题,有的表中的数据和索引想要排列的顺序很是相近,而另一些表中的数据和索引想要排列的顺序相距甚远,聚簇因子的作用就是用来标示这个的,聚簇因子越小,相似度越高,聚簇因子越大,相似度越低。

1、列顺序

当计算有效索引选择率时,在基于区间的谓词之后的所有基于列的谓词都将被忽略——但是计算有效表选择率的时候还会使用他们——这样就导致oracle计算得出该索引的成本高得离谱。这就建议我们重新调整某些索引的结构,将对应于区间谓词的列调整到索引定义的末尾。这种调整可能会改变clustering_factor的值。

SQL> create table t1
  2  pctfree 90
  3  pctused 10
  4  as
  5  select
  6    trunc((rownum-1)/ 100)  clustered,
  7    mod(rownum - 1, 100)  scattered,
  8    lpad(rownum,10)    small_vc
  9  from
 10    all_objects
 11  where
 12    rownum <= 10000
 13  ;

表已创建。

SQL> create index t1_i1_good on t1(clustered, scattered);

索引已创建。

SQL> create index t1_i2_bad  on t1(scattered, clustered);

索引已创建。

SQL> begin
  2    dbms_stats.gather_table_stats(
  3      user,
  4      't1',
  5      cascade => true,
  6      estimate_percent => null,
  7      method_opt => 'for all columns size 1'
  8    );
  9  end;
 10  /

PL/SQL 过程已成功完成。

SQL> select i.index_name,i.blevel,i.leaf_blocks,i.clustering_factor from user_indexes i;

INDEX_NAME                         BLEVEL LEAF_BLOCKS CLUSTERING_FACTOR
------------------------------ ---------- ----------- -----------------
T1_I1_GOOD                              1          24               278
T1_I2_BAD                               1          24             10000

SQL> set autotrace trace exp;
SQL> select count(small_vc)
  2    from t1
  3   where scattered = 50
  4     and clustered between 1 and 5;

执行计划
----------------------------------------------------------
Plan hash value: 2833503776

-------------------------------------------------------------------------------------------
| Id  | Operation                    | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |            |     1 |    17 |     4   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE              |            |     1 |    17 |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| T1         |     6 |   102 |     4   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | T1_I1_GOOD |     6 |       |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("CLUSTERED">=1 AND "SCATTERED"=50 AND "CLUSTERED"<=5)
       filter("SCATTERED"=50)

SQL> select
  2  /*+ index(t1 t1_i2_bad) */
  3   count(small_vc)
  4    from t1
  5   where scattered = 50
  6     and clustered between 1 and 5;

执行计划
----------------------------------------------------------
Plan hash value: 2223336776

------------------------------------------------------------------------------------------
| Id  | Operation                    | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |           |     1 |    17 |     9   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE              |           |     1 |    17 |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| T1        |     6 |   102 |     9   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | T1_I2_BAD |     6 |       |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("SCATTERED"=50 AND "CLUSTERED">=1 AND "CLUSTERED"<=5)

在第一个执行计划中,尽管存在一个索引(T1_I2_BAD)能很好的满足以上查询的要求,其第一列是scattered(使用相等谓词),第二列是clustered(使用基于区间的谓词),优化器还是选择了t1_i1_good索引。
在第二个执行计划中,添加了一个提示来强制oracle使用我们认为更能满足查询要求的那个索引(t1_i2_bad),但是由此带来的成本将是优化器的默认选择的成本的两倍还要多(由4变为9)。
这就突出了优化器利用clustering_factor来计算索引访问路劲成本的缺陷。不管这个示例中用的是哪一个索引,访问表的数目是完全相同的——但是访问顺序会存在差异,这也足以导致优化器成本的计算结果产生巨大的差异。

SQL> select s.table_name,
  2         s.column_name,
  3         s.num_distinct,
  4         s.density,
  5         s.num_nulls,
  6         s.avg_col_len
  7    from user_tab_col_statistics s
  8   where table_name = 'T1';

TABLE_NAME                     COLUMN_NAME                    NUM_DISTINCT    DENSITY  NUM_NULLS AVG_COL_LEN
------------------------------ ------------------------------ ------------ ---------- ---------- -----------
T1                             CLUSTERED                               100        .01          0           3
T1                             SCATTERED                               100        .01          0           3
T1                             SMALL_VC                              10000      .0001          0          11

scattered = 50 的选择率: 1/100
clustered between 1 and 5 的选择率:(5-1)/(99-0)+2/100
联合选择率:1/100 * (5-1)/(99-0)+2/100

SQL> --cost(t1_il_good)
SQL> select         
  2         1 +   
  3         ceil(24 * ((5-1)/(99-0)+2/100)) +   
  4         ceil(278 * (1/100 * ((5-1)/(99-0)+2/100)))  
  5  from dual;  

1+CEIL(24*((5-1)/(99-0)+2/100))+CEIL(278*(1/100*((5-1)/(99-0)+2/100)))
-----------------------------------------------------------------------
                                                                      4

SQL> --cost(t1_il_bad)
SQL> select         
  2         1 +   
  3         ceil(24 * (1/100 * ((5-1)/(99-0)+2/100))) +   
  4         ceil(10000 * (1/100 * ((5-1)/(99-0)+2/100)))  
  5  from dual; 

1+CEIL(24*(1/100*((5-1)/(99-0)+2/100)))+CEIL(10000*(1/100*((5-1)/(99-0)+2/100)))
---------------------------------------------------------------------------------
                                                                                9


2、额外的列

为索引添加一个或者两个列。也会导致clustering_factor出现剧烈的变化。

SQL> create table t1
  2  as
  3  select
  4  sysdate + trunc((rownum-1) / 500)movement_date,
  5  trunc(dbms_random.value(1,60.999))product_id,
  6  trunc(dbms_random.value(1,10.000))qty,
  7  lpad(rownum,10)small_vc,
  8  rpad('x',100)padding
  9  from
 10  all_objects
 11  where
 12  rownum <= 10000
 13  ;

表已创建。

SQL> create index t1_i1 on t1(movement_date);
begin
  dbms_stats.gather_table_stats(
    user,
    't1',
    cascade => true,
    estimate_percent => null,

索引已创建。

    method_opt => 'for all columns size 1'
  8    );
  9  end;
 10  /

PL/SQL 过程已成功完成。

SQL> create index t1_i2 on t1(movement_date, product_id);
begin
dbms_stats.gather_table_stats(
user,
't1',
cascade => true,

索引已创建。

SQL>   2    3    4    5    6  estimate_percent => null,
  7  method_opt => 'for all columns size 1'
  8  );
  9  end;
 10  /

PL/SQL 过程已成功完成。

SQL> select i.index_name,i.blevel,i.leaf_blocks,i.clustering_factor from user_indexes i;

INDEX_NAME                         BLEVEL LEAF_BLOCKS CLUSTERING_FACTOR
------------------------------ ---------- ----------- -----------------
T1_I1                                   1          27               184
T1_I2                                   1          31              6664

虽然索引的大小只有一点点增加(这也可以通过叶块的数目提现出来),但是,clustering_factor的值再次出现了严重的变化。

SQL> select /*+ index(t1 t1_i1) */
  2   sum(qty)
  3    from t1
  4   where movement_date = trunc(sysdate) + 7
  5     and product_id = 44;

执行计划
----------------------------------------------------------
Plan hash value: 269862921

--------------------------------------------------------------------------------------
| Id  | Operation                    | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |       |     1 |    14 |    12   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE              |       |     1 |    14 |            |          |
|*  2 |   TABLE ACCESS BY INDEX ROWID| T1    |     8 |   112 |    12   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | T1_I1 |   500 |       |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
-----      
    
[2]MongoDB 安装配置
    来源: 互联网  发布时间: 2013-11-07

MongoDB 是一个高性能,开源,无模式的文档型数据库,采用C++开发,是当前NoSql数据库中比较热门的一种,在许多场景下可用于替代传统的关系型数据库或键/值存储方式。


1,特点和功能

1) 特点

  • 高性能、易部署、易使用,存储数据非常方便。
  • 面向集合存储,易存储对象类型的数据,模式自由。
  • 支持动态查询,支持完全索引,包含内部对象。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。
  • 文件存储格式为BSON(一种JSON的扩展),可通过网络访问。

2) 功能

  • 面向集合的存储:适合存储对象及JSON形式的数据。
  • 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
  • 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

2,  适用场合

  • 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源 过载。
  • 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
  • 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
  • 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。


  • 3, 下载安装

    mongoDB 下载, 最新版本 mongodb-linux-x86_64-2.2.3.tgz

    mongoDB 安装:

    tar zxvf mongodb-linux-x86_64-2.2.3.tgz

    cd mongodb-linux-x86_64-2.2.3

    sudo mkdir /opt/mongodb-2.2.3

    sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/


    安装完毕后,在浏览器URL栏输入: http://localhost:27017/,出现下面内容则表示安装成功!




    4, 启动关闭

    1) 默认启动

    sudo ./bin/mongod    (默认保存文件目录为/data/db/, 没有则新建 sudo mkdir -p /data/db/, 默认端口为27017)


    2)指定目录启动

    sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/       (保存文件目录为/opt/mongodb-2.2.3/ , 没有则新建)


    3) 指定端口启动

    sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/ -p 27000        (端口修改为指定27000),启动输出如下:

    MongoDB starting : pid=4222 port=27000 dbpath=/opt/mongodb-2.2.3/ 32-bit host=ubuntu




    5, 命令示例



    6, 应用示例





    参考推荐:

    MongoDB学习笔记

    mongod参数说明


    作者:sunboy_2050 发表于2013-2-4 23:47:05 原文链接
    阅读:359 评论:0 查看评论

        
    [3]CentOS 6.3 Minimal 源码安装 Postgresql 9.2.2
        来源:    发布时间: 2013-11-07

    # 修改防火墙设置,打开5432端口
    vi /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT

    # 重启防火墙使新设置生效
    service iptables restart

    # 新增用户组
    groupadd postgres

    # 新增用户
    useradd postgres -M -g postgres

    # 新建数据库执行文件目录
    mkdir -p /usr/local/pgsql

    # 新建数据库数据文件目录
    mkdir -p /data/pgsql/data

    # 修改目录拥有者
    chown -R postgres /usr/local/pgsql/.
    chown -R postgres /data/pgsql/data
    chown -R postgres /data/pgsql/data/.

    # 编辑PATH搜索路径
    vi /etc/profile
    Append these 2 lines to the end of the file:
    PATH=/usr/local/pgsql/bin:$PATH
    export PATH

    # 生效PATH搜索路径
    source /etc/profile

    # 安装编译源码所需的工具和库
    yum -y install wget gcc readline-devel zlib-devel make

    # 进入源码压缩包下载目录
    cd /usr/src

    # 下载源码压缩包
    wget http://ftp.postgresql.org/pub/source/v9.2.2/postgresql-9.2.2.tar.bz2

    # 解压缩源码包
    tar jxvf ./postgresql-9.2.2.tar.bz2

    # 进入解压缩源码目录
    cd ./postgresql-9.2.2

    # 执行源码编译配置脚本
    ./configure

    # 编译源码
    make

    # 安装
    make install

    # 变更登录用户
    su - postgres

    # 执行数据库初始化脚本
    /usr/local/pgsql/bin/initdb --encoding=utf8 -D /data/pgsql/data

    # 退出变更登录
    exit

    # 复制PostgreSQL执行脚本
    cp /usr/src/postgresql-9.2.2/contrib/start-scripts/linux /etc/init.d/postgresql

    # 增加执行权限
    chmod +x /etc/init.d/postgresql

    # 编辑PostgreSQL执行脚本,指定数据库文件目录
    vi /etc/init.d/postgresql
    PGDATA="/data/pgsql/data"

    # 编辑配置文件,配置可访问数据库的网络地址
    vi /data/pgsql/data/postgresql.conf
    listen_addresses = '*'

    # 启动PostgreSQL服务
    service postgresql start

    # 以postgres用户登录数据库,修改postgres用户的数据库密码
    psql -U postgres
    postgres=# ALTER USER postgres PASSWORD '123456';
    postgres=# \q

    # 编辑配置文件,设置密码md5验证
    vi /data/pgsql/data/pg_hba.conf
    # "local" is for Unix domain socket connections only
    local all all md5
    # IPv4 local connections:
    #host all all 127.0.0.1/32 trust
    host all all all md5

    # 重启数据库服务
    service postgresql restart

    >>>>>>>>>>>>>>>完成

    本文链接


        
    最新技术文章:
    ▪gc buffer busy/gcs log flush sync与log file sync    ▪让你的PL/SQL更好用    ▪ADO.NET中的非脱机数据库查询
    ▪参数job_queue_processes与Oracle jobs    ▪11gR2游标共享新特性带来的一些问题以及_cursor...    ▪_library_cache_advice和latch:shared pool、latch:shared poo...
    ▪SQL: Date Utility    ▪DB2 分区表增加分区    ▪DB2第一步 — 创建表
    ▪oracle 数据库    ▪插入10万条记录测试    ▪rebuild index VS. rebuild index online
    ▪如何处理undo tablespace 表空间太大的问题    ▪ado执行存储过程中包含结果集获取输出参数为...    ▪oracle函数的demo
    ▪Entity Framework 学习建议及自学资源    ▪存储过程的编写    ▪Linux/Unix shell 自动发送AWR report(二)
    ▪第二章 Oracle恢复内部原理(基础数据结构)    ▪Redis源码学习之【Tcp Socket封装】    ▪Java Jdbc减少与Oracle之间交互提升批量处理性能...
    ▪南大通用GBase8a Vs Oracle11g 单机测试亲测    ▪oracle 中行列转换    ▪rhel下安装oracle10g+asm---测试环境搭建
    ▪Redis系列-主从复制配置    ▪MySQL索引与查询优化    ▪INDEX受到NULL值的影响
    ▪测试人员的SQL语言 系列    ▪SQL数据库基本语句    ▪MySQL Replication常见错误整理[持续更新...]
    ▪eclipse下建立esper的demo    ▪把oracle rac 转化为单机数据库    ▪Redis系列-存储篇sorted set主要操作函数小结
    ▪基本的SQL*Plus报表和命令    ▪druid简单教程    ▪11g调度--scheduler使用
    ▪EF基础一    ▪db2存储过程中循环语句while do的continue有没有...    ▪oracle 创建DBLINK
    ▪DB2数据库备份还原    ▪Warning: prerequisite DBD::mysql 1 not found错误解决方...    ▪innotop性能监视mysql,innodb工具
    ▪数据迁移:DataGuard配置    ▪QX项目实战-19.跨库数据同步    ▪Mysql EXPLAIN
    ▪Oracle 11g AWR 系列七:Active Session History (ASH) 报...    ▪Oracle 11G新特性(共36个)    ▪父子节点问题
    ▪OEM简介及按钮乱码问题    ▪NoSql之MongoDB的常用类管理    ▪ORA-39700: database must be opened with UPGRADE option
    ▪node.js 访问redis数据库,pub/sub    ▪使用DBMS_REDEFINITION在线重定义分区表    ▪SQL Developer 使用问题与解决方法汇总
    ▪oralce 11g dataguard 概念    ▪ORA-30004 错误处理    ▪oracle分组函数rollup,cube
    ▪Sql Developer 使用问题与解决方法汇总    ▪Configure Oracle Dataguard Primary-ASM to Physical-ASM    ▪Oracle Data Guard 理论知识
    ▪Control File 恢复    ▪Oracle数据文件收缩    ▪Oracle 11g AWR 系列五:如何生成 AWR 报告?
    ▪Wireshark数据包分析实战(第2版)    ▪MySql用户权限控制    ▪db2和oracle查询序列区别
    ▪更新blob字段的存储过程    ▪MySQLReport分析报告三    ▪DB2中的序列
    ▪Oracle中DBMS_RANDOM.STRING 的用法    ▪SQL SERVER无法安装成功,sqlstp.log文件提示[未发...    ▪Data Guard 部署物理备库的 10 大注意事项
    ▪万能数据库查询分析器使用技巧之(九)    ▪SQL 自定义Split函数    ▪视图 v$sql,v$sqlarea,$sqltext,v$sqltext_with_newlines 的...
    ▪Data Guard Standby_archive_dest 和 Log_archive_dest_n 的...    ▪机房收费系统数据库设计(一)    ▪利用putty的SSH tunnel连接Oracle
    ▪DBCA建库偶遇ORA-27125    ▪使用PowerPivot建立简单的分析模型    ▪Linux/Unix shell 自动发送AWR report
    ▪写入到blob字段的存储过程    ▪关于JDBC中ResultSet接口的一点细节探究    ▪Data Guard 配置 Standby Redo Log
    ▪linux下redis的安装    ▪windows下redis的安装    ▪手动创建数据库步骤(简单翻译官方文档)
    ▪Ubuntu安装Mongodb    ▪SQL CLR应用    ▪redis的配置文件参数--详细说明
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3