【摘要】1 数据库的技术上,目前我们公司在研究hadoop分层数据库,具体了解不多;外面流行的NoSql非关系型数据库,像亚马逊、谷歌还有一些日本企业

经验优秀_大数据优质经验_数据和经验

1.数据库的技术上,目前我们公司在研究hadoop分层数据库,具体了解不多;外面流行的NoSql非关系型数据库,像亚马逊、谷歌还有一些日本企业都有自己的NoSql数据库;

2.传统关系型数据库的优化,数据库层的优化和上层使用的优化。

数据库层:需要DBA进行优化,减少碎片,进行分区等;

使用层的优化,即优化SQL

从外界因素来看影响SQL有:CPU、RAM、Network、Disk

CPU:SQL的大量order by,大量group by,case when等都会很费CPU,需要CPU进行计算。是否可以使用汇总来减少此问题

RAM:查找的数据量过大,导致内存资源占用过多。

如无where的SQL,select *的SQL,全表扫描等;

频繁的update、insert都会影响内存,每次对SQL的解析都需要一定的时间和空间。采用绑定变量。

Network:过多的DB连接,频繁的DB开关,跨库的关联,大量数据的导出,复杂的SQL等。

Disk:

大数据量的表,建立索引,保证索引的有效性;

减少大表的insert和delete,会造成磁盘碎片,导致磁盘指针的不连续性;

大表的insert和delete会造成索引的失效,必要时先去掉索引再操作增删改;

索引其实是一张表,要保证其精简

索引的建立,最好用在易排序字段,如number,date等,勿varchar;

varchar字段尽量保持长度的一致性,宁可多给出空间;

减少磁盘的读取次数;

对大表禁止顺序性的全表扫描,使用索引;

减少disdinct,用unionall代替union;

Not like,,全模糊like,is null,is not null,not in都会使索引失效;

索引上不要使用任何函数,尽量在等号的另一头使用函数;

SQL的书写一致,减少解析时间;

选择最佳的执行计划,复杂的SQL,不如多个简单的SQL;

减少嵌套子SQL,使用关联查询;

避免笛卡尔积连接;

避免使用*,数据库需要对*进行一次匹配,会消耗资源,而且并不一定所有的字段都要进行查询或者写入,写入时表结构变化还会导致出错,所以避免*;

全表删除,不要使用delete,使用truncate;

全表分页的效率较低,建议使用分步是分页;

3.在数据读取优化到一定程度后,代码上也可以进行很大的优化。

避免过多的开装箱,使用值类型;

对引用类型的集合,多使用泛型;

避免循环嵌套,和无休止的递归;

避免循环中建立大对象;

对大对象的释放;

4.逻辑上的优化

在需要查询大量数据的时候,可以使用分页;

分页影响到一些图标的产生时,可以借助汇总,先展示汇总信息和图标,然后在进行详情的钻取;

时间空间的相互替换。

5.对常用信息的本地化保存,如QQ第一次加载很慢,但后面登陆会很快。


本文由转载于互联网,如有侵权请联系删除!