`

千万值表数据量优化

 
阅读更多
一、试验方式:
1、利用工具进行数据插入、查询试验,目标是单表数据超过1000W条记录。
2、针对单个表创建单独的数据存储空间和索引存储空间。
3、对表进行anlyze分析。
4、创建表分区。
二、试验结论:
1 数据插入与数据量大小无关,与数据表是否在大量并行操作有关。
2 数据查询与表的数据存储空间有很大关系,数据量大的表建议单独创建数据存储空间和索引存储空间。
3 数据查询结果集的大小与查询性能有很大关系,如在普通索引下,查询结果大与小耗时差别接近1000倍以上。
4 查询性能与索引类型有很大关系,主要是根据范围查询,如时间范围
select count(id)  from list where time between '2011-04-30 00:00:00' and '2011-05-30 00:01:00'; 
time字段由于离散度很高,只能建为b树索引,在按时间范围进行查询时耗时在10m左右,经过数据分析。
如改成
select count(id)  from list
where itime >= '20100430' and itime <= '20100530';
itime字段为整数,精确到年月日,由于离散度低,可以建为bitmap类型索引,一年只有356个,即便有1亿条记录,其索引记录最多只

有356条。
查询统计就可以过到ms级(0.078s)比前一种情况提高几百倍。同样字段重复值与记录数之比为1:100以上都可以建为bitmap类型索引,一般大数据表要结合各种索引的特性进行创建合适的索引。

5 SQL语法与性能有很大关系,一是索引顺序,二是嵌套查询
直接从查询统计,索引的解析是从后向前解析。
select count(id)  from list
where itime >= '20100330'  and itime <= '20100830'
   and icode = '3123232331';  3.219s

select count(id)   from (select id from list
where itime >= '20100330'  and itime <= '20100830'
   and icode = '3123232331');  0.015s

6 表分析与查询性能有关系。通过anlyze对表或是索引进行分析前后对查询性能有明显的变化。
分析表中所有索引:analyze table list compute statistics for all indexes
分析表中指定索引:analyze index LIST_2 compute statistics
分析表所有索引耗时长,分析指定索引耗时短。

7、如果按时间存放可以针对大数据表创建表分区,提高插入和查询速度。
创建表并指定分区。
create table LIST
(
  ID                   INTEGER not null,
  ICODE                CHAR(14),
  NAME            CHAR(64),
  SEX                CHAR(2),
  CARD_NUMBER        CHAR(20),
  TIME            CHAR(21),
  ITIME            INTEGER,
  MONTH              INTEGER
)
partition by list (MONTH)
(
  partition MONTH1 values (1)
    tablespace TEST1,
  partition MONTH2 values (2)
    tablespace TEST2,
  partition MONTH3 values (3)
    tablespace TEST3,
  partition MONTH4 values (4)
    tablespace TEST4,
  partition MONTH5 values (5)
    tablespace TEST5,
  partition MONTH6 values (6)
    tablespace TEST6,
  partition MONTH7 values (7)
    tablespace TEST7,
  partition MONTH8 values (8)
    tablespace TEST8,
  partition MONTH9 values (9)
    tablespace TEST9,
  partition MONTH10 values (10)
    tablespace TEST10,
  partition MONTH11 values (11)
    tablespace TEST11,
  partition MONTH12 values (12)
    tablespace TEST12
);
创建索引其它属性与普通表一样。
create index LIST_1 on LIST (ID);
create index LIST_2 on LIST (ICODE);
create bitmap index LIST_3 on LIST (ITIME);
create bitmap index LIST_4 on LIST (MONTH);

查询数据
select count(id)  from LIST partition(MONTH1)
where itime between '20100101' and '20100131'
and icode = '1000182';

删除分区数据
删除分区:alter table [tbname] drop partition [ptname];
alter table LIST drop partition MONTH1;
删除子分区:alter table [tbname] drop subpartition [ptname];



最后总结:表分区和sql语句优化,建立索引,数据缓存、数据分流,读写分离,和一些第三方插件
分享到:
评论

相关推荐

    mysql千万级数据大表该如何优化?

    数据项:是否有大字段,那些字段的值是否经常被更新; 3.数据查询SQL条件:哪些数据项的列名称经常出现在WHERE、GROUP BY、ORDER BY子句中等; 4.数据更新类SQL条件:有多少列经常出现UPDATE或DELETE 的WHERE子句中...

    30个mysql千万级大数据SQL查询优化技巧详解

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id ...

    mysql分页查询优化,大数据量优化

    传统的mysql分页查询 ...特别是上线后数据量积累比较快,必须重视SQL优化,否则影响系统运行和用户使用体验 性能实验 直接用limit start, count分页语句, 也是我程序中用的方法: select * from table lim

    百万数据查询优化技巧

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER B 2.应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索 3.应尽量避免在 WHERE 子句中使用!=或操作符,否则将引擎...

    MySQL大表优化方案探讨

    增删改查性能都会急剧下降,可以参考以下步骤来优化:除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五...

    对大量数据SQL查询的优化心得.docx

    对大量数据SQL查询的优化心得:1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引;2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而...

    浅谈MySQL大表优化方案

    阿里云RDS FOR MySQL(MySQL5.7版本)数据库业务表每月新增数据量超过千万,随着数据量持续增加,我们业务出现大表慢查询,在业务高峰期主业务表的慢查询需要几十秒严重影响业务 方案概述 一、数据库设计及索引优化 ...

    SQL Server数据库查询速度慢原因及优化方法

    4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一...

    最全的MySQL大表优化方案

    增删改查性能都会急剧下降,可以参考以下步骤来优化:除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五...

    INFORMIX数据库性能调整

    在索引的建立过程中,能够建成 unique 索引的,最好建成unique 索引,举例说明:假设在业务系统中,check_info 表是核保信息表,有保单号(bm_cert)字段,在投保单登录前,此字段无值。若将此字段置为空,则登录前...

    论文研究-基于HEVC屏幕图像编码的哈希表的优化算法.pdf

    为了减小哈希表的空间,通过对原算法优化提出了一种3字节计算哈希值方法,将源数据看作是一个由以YUV三元组为元素组成的数据集合,然后以YUV三元组为单位计算哈希值,这样不但减少了哈希值的计算量,而且使哈希表的...

    LuaTableOptimizer, 简单的只读lua表优化器.zip

    LuaTableOptimizer, 简单的只读lua表优化器 LuaTableOptimizer简单的只读lua表优化器Lua表通常用于存储游戏的配置数据。 如果包含许多具有相同值的字段,则需要大量内存。 这种优化可以提高内存使用和加载速度。特性...

    数据库系统之查询处理与优化.pdf

    整个表数据全部读取,也就是没有任何条件的查询 2.有⼀个单⼀条件准确定位某⼀个数据记录 3.有⼀个范围条件要定位多个数据记录 4.单个条件和范围条件的结合 选择操作典型实现⽅法 1.简单的全表扫描⽅法 顺序扫描,...

    数据库设计与优化.pdf

    从性能角度来说,冗余数据库可以分散数据库压 力,冗余表可以分散数据量大的表的并发压力,也可以加快特殊查询的速度,冗余字段可以有效减少数据库表的连接, 提高效率。 1.3.3 主键的设计 主键是必要的,SQL SERVER...

    巡检线路排版优化

    设置参数a a为每个自变量中数据量的个数 例如组胺中的数量为2 而硫酸铝钾中为5 设置参数b b为每个自变量中数据量的异常点数 运用格布拉斯准则确定其中的异常点 例如硫酸铝钾中ppm为0.5时g的值有 174 178 123 122 134...

    SQL性能优化

     SQL在运行时先取出数个查询的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。  实际大部分应用中是不会产生重复的记录,推荐采用UNION ALL操作符...

    oracle SQL性能优化

    (5) 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 (6) 使用DECODE函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的...

    ORACLE优化SQL语句,提高效率

     (5)在SQL*Plus , SQL*Forms和Pro*C中重新配置ARRAYSIZE参数, 能够增加每次数据库访问的检索数据量 ,建议值为200。  (6)使用DECODE函数来减少处理时间:  使用DECODE函数能够避免重复扫描相同记录或重复连接...

Global site tag (gtag.js) - Google Analytics