• 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;
    
  • 相关阅读:
    纸牌排序
    将年份转换成天干地支
    猜算式
    字符串的简单处理
    九宫格填数字
    扫雷
    嗨喽
    Input.GetAxis与Input.GetAxisRaw区别
    C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别
    开发游戏所需知识(知乎转载)
  • 原文地址:https://www.cnblogs.com/congxinglong/p/13883209.html
Copyright © 2020-2023  润新知