千万值表数据量优化

标签: 千万 数据 优化 | 发表时间:2013-12-07 09:49 | 作者:qi20088
出处:http://www.iteye.com
一、试验方式:
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语句优化,建立索引,数据缓存、数据分流,读写分离,和一些第三方插件

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [千万 数据 优化] 推荐:

千万值表数据量优化

- - 数据库 - ITeye博客
1、利用工具进行数据插入、查询试验,目标是单表数据超过1000W条记录. 2、针对单个表创建单独的数据存储空间和索引存储空间. 1 数据插入与数据量大小无关,与数据表是否在大量并行操作有关. 2 数据查询与表的数据存储空间有很大关系,数据量大的表建议单独创建数据存储空间和索引存储空间. 3 数据查询结果集的大小与查询性能有很大关系,如在普通索引下,查询结果大与小耗时差别接近1000倍以上.

[原] java千万级别数据生成文件思路和优化

- - BlogJava-首页技术区
     摘要: 一年前写过一个百万级别数据库数据生成配置xml文件的程序,程序目的是用来把数据库里面的数据生成xml文件.程序可以配置多少文件生成到一个文件中去. 程序刚开始设计的时候说的是最多百万级别数据,最多50W数据生成到一个xml文件里面去,所以在做测试的时候自己也只是造了100W的数据并没有做过多数据量的测试,然后问题就来了....由于程序使用的局点数据量巨大,需要生成xml文件的客户资料接近千万级别的程度,而现场对程序的配置大约是100W条数据生成一个xml文件里面去,程序在这样的大数据量下面偶尔会有崩溃.   阅读全文.

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

- - IT瘾-tuicool
本文总结了30个mysql千万级大数据SQL查询优化技巧,特别适合大. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0.

数据库优化

- - 数据库 - ITeye博客
程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: . a) SQL的使用规范: .   i.尽量避免大事务操作,慎用holdlock子句,提高系统并发能力.   ii.尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接.   iii.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作.

数据库优化小计

- - CSDN博客数据库推荐文章
周一夜间进行了一次XX业务相关的数据库表优化. 一共4张表,数据量不大,最小的40万记录,最大的300万,大小不超过300MB. 但由于历史原因,表没有建立索引,对应的服务使用的SQL千姿百态,修改起来难度有点大,容易改错,涉及的全国客户较多,大部分都是全表扫描,在秒级的响应时间,但大多客户还能忍着.

数据库的优化tips

- - CSDN博客数据库推荐文章
数据库   TIPS::. 1、用于记录或者是数据分析的表创建时::使用Id作为主键,1,2,3...表示消息条数,用户账号id用于做外键,一个用户对应唯一个accountId.                                     一个accountId可以对应多条数据;. 2、创建索引::    例如需要根据注册版本号和注册游戏ID来查询另外一些字段的时候,就可以根据版本号和游戏ID来创建索引::相当于就是根据查询条件来建索引;.

数据库查询优化

- - SQL - 编程语言 - ITeye博客
1 使用SET NOCOUNT ON 选项:.     缺省地,每次执行SQL语句时,一个消息会从服务端发给客户端以显示SQL语句影响的行数. 通过关闭这个缺省值,你能减少在服务端和客户端的网络流量,帮助全面提升服务器和应用程序的性能. 为了关闭存储过程级的这个特点,在每个存储过程的开头包含“SET NOCOUNT ON”语句.

MySQL 对于千万级的大表要怎么优化?

- - 数据库 - ITeye博客
MySQL 对于千万级的大表要怎么优化. 链接:https://www.zhihu.com/question/19719997/answer/81930332. 商业转载请联系作者获得授权,非商业转载请注明出处. 很多人第一反应是各种切分;我给的顺序是:. 第二加缓存,memcached,redis;.

MySQL优化之数据库结构:数据对象优化

- - CSDN博客数据库推荐文章
使用PROCEDURE ANALYSE函数优化表的数据类型. 表需要使用何种数据类型,是需要根据应用来判断的. 在MySQL中,可以使用函数PROCEDURE ANALYSE()对当前应用的表进行分析,该函数可以对数据库中列的数据类型提出优化建议,用户可以根据应用的实际情况斟酌考虑是否实施优化. 以下是函数PROCEDURE ANALYSE()的使用方法:.

MySQL数据库优化总结

- - CSDN博客推荐文章
        对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要. 一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小.        一、数据库设计   适度的反范式,注意是适度的.