zoukankan      html  css  js  c++  java
  • Oracle 数据类型对比 不同数据类型对数据空间占用及查询效率影响

    先上结论

    字段1的数据类型为 VARCHAR(64) 其中插入30个字符
    字段2的数据类型为 number(8) 其中插入数字序列
    在数据量为100万条记录的情况下
    数据占用空间比约为 3:1
    查询时间比约为 5:1
    字段1 每百万数据占用空间约 40 MB

    准备数据

    -- 创建两个测试表
    -- 一个为字符类型ID, 另一个为数字类型ID
    -- 并将ID字段配置为主键
    CREATE TABLE TEST1(
    ID VARCHAR2(64)
    CONSTRAINT PK_TEST1 PRIMARY KEY(ID)
    );
    CREATE TABLE TEST2(
    ID NUMBER(8)
    CONSTRAINT PK_TEST2 PRIMARY KEY(ID)
    );
    -- 创建序列, 用于插入数字类型ID
    CREATE SEQUENCE SEQ_TEST INCREMENT BY 1 START WITH 1;
    -- 循环写入100万条数据
    BEGIN
    FOR I IN 1..1000000 LOOP
    --向TEST1中写入带6位毫秒的时间戳+10位随机字符的字符串
    INSERT INTO TEST1 
    SELECT TO_CHAR(SYSTIMESTAMP,'YYYYMMDDHH24MISSFF6')||ROUND(DBMS_RANDOM.VALUE(),10)*10000000000 FROM DUAL;
    --向TEST2中写入序列SEQ_TEST的值
    INSERT INTO TEST2 SELECT SEQ_TEST.NEXTVAL FROM DUAL;
    END LOOP;
    COMMIT;
    END;
    

    比较表空间占用情况

    -- TEST1 40 MB
    -- TEST1 13 MB
    -- PK_TEST1 41 MB
    -- PK_TEST2 15 MB
    SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MB 
    FROM USER_SEGMENTS 
    WHERE SEGMENT_NAME IN ('TEST1','TEST2','PK_TEST1','PK_TEST2')
    GROUP BY SEGMENT_NAME;
    

    查询时间比较

    -- 查询时间 9.371 秒
    select count(1) from test1;
    
    -- 查询时间 1.817 秒
    select count(1) from test1;
    
  • 相关阅读:
    能用HTML/CSS解决的问题,就不要用JS
    跨域
    从输入url到页面展示到底发生了什么
    hosts 文件
    了解Web及网络基础
    hybrid
    组件化和 React
    MVVM 和 VUE
    虚拟 DOM
    ES6模块化与常用功能
  • 原文地址:https://www.cnblogs.com/congxinglong/p/13883209.html
Copyright © 2011-2022 走看看