以Oracle数据库举例:(a-G要求掌握,H一般为DBA操作,了解就可以了)

a。

建库:已知将保存海量数据的时候,因为Oracle是通过用户来管理数据的,

第一步我们先建一个tableaspace(假设表空间名为TEST),

然后建立用户TEST(一般情况下用户名和表空间同名),

建立的用户TEST使用已建立的tablespace(TEST).

这样做是避免访问上产生热点。

b。

建表:建表时最好依照第三范式去建表(请回答三个范式),

这样可以最大程度避免出现数据冗余、插入、删除和更新异常,保证数据完整性。

而且表结构合理的情况下,可以加快查询速度。

c。

索引:在经常查询的字段上面建立索引,

利用index对查询进行优化,(index可以避免对表的一个全面扫描)

原理:当以某个字段建立一个索引的时候,数据库就会生成一个索引页,

索引页不单如果表的列很少,不适合建索引.单保存索引的数据,还保存了索引在数据库的具体的物理地址,当我们查询数据时,oracle会先查索引页,这样就能够很快的定位查找到要找的记录)。

注意:

当执行过多次的insert,delete,update后,会出现索引碎片,影响查询速度,我们应该对索引进行重组.

D:

sql语句的优化:

多使用共享语句尽量使你的sql语句能够使用索引。

怎样使sql语句能够使用到索引呢:

当sql语句中包含not in,<>,is null,is not null,like '%%'的时候不会用索引。

IN: in会拆成一堆or的,可以使用表的索引。

NOT IN:强列推荐不使用,因为它不能应用表的索引。

<> 操作符(不等于): 不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。

优化方案:用其它相同功能的操作运算代替,如a<>0 改为 a>0 or a<0;a<>’’ 改为 a>’’.

IS NULL 或IS NOT NULL操作(判断字段是否为空):

判断字段是否为空一般是不会应用索引的,因为B树索引(oracle大多是使用B树索引)是不索引空值的。

优化方案:用其它相同功能的操作运算代替,如 a is not null 改为 a>0 或a>’’等。

is null 时,用一个缺省值代替空值,例如业扩申请中状态字段不允许为空,缺省为申请。

LIKE:LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,

优化方案:如LIKE ‘%001%’ 这种查询不会引用索引,会产生全表扫描,

而LIKE ‘001%’则会引用范围索引。进行范围的查询,性能肯定大大提高。

E:

多表查询时,一般一个大表关联几个小表,最好不要几个大表相关联,那样也会影响到查询速度。

F:

oralce访问表中的数据共有三种方式,全表扫描,通过索引扫描,使用共享语句(一模一样)。

select id,name from tb_sutdent;

Select id,name from tb_sutdent;

我们JDBC查询中使用PreparedStatement实际上就是使用共享语句。

所以我们要多使用共享语句来加快查询速度。

G:

经常查询的SQL可以写成存储过程。

H:

当表数据达到几十到几百GB时,就要考虑对表进行分区了,

分区的优点:

1.增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用

2.维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;

3.均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;

4.改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

分区的几种方法:范围分区 ,Hash分区(散列分区) ,复合分区 。

应用:实际项目中大多使用范围分区,

例如按时间范围(日期字段)来分区,如2005-2006数据作为一个分区,2006-2007作为一个分区。

CREATE TABLE emp(

comm INT DEFAULT 0,

status VARCHAR2(18) DEFAULT '申请'

);

CREATE TABLE tb_emp(

emial VARCHAR2(50) DEFAULT 'aaa'

);

SELECT * FROM tb_emp WHERE email IS NULL --不使用index

SELECT * FROM tb_emp WHERE email = 'aaa' --使用index

最新文章

  1. 【Win10 应用开发】集成语音命令
  2. [连载]《C#通讯(串口和网络)框架的设计与实现》-3.设备驱动的设计
  3. ORACLE 11g 数据库体系结构图
  4. iOS 设置1像素的UIView线
  5. Java Daemon 守护线程
  6. 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码
  7. Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置
  8. Routine Problem(数学)
  9. Android开发者的Git&amp;Github(一)
  10. Slider 滚动条 Pagination分页插件 JS Ajax 数据范围筛选 加载 翻页 笔记
  11. json2form已改名为AForm
  12. Spring MVC SimpleUrlHandlerMapping example
  13. 【DP专辑】ACM动态规划总结
  14. 简易RPC框架-熔断降级机制
  15. 在SpringBoot中使用FluentValidator验证插件
  16. .Net深入实战系列&mdash;JSON序列化那点事儿
  17. OO第一单元总结分析
  18. 创建react项目的几种方法
  19. 解决无法连接mysql问题
  20. if else if else 语句

热门文章

  1. 快速搭建一套k8s集群环境
  2. 图片隐写之Image Steganography软件的使用
  3. 华为HCIP实验--OSPF单区域
  4. C#?和??运算符以及合并条件表达式
  5. yum报错 , yum相关配置信息,yum重装
  6. AcWing 289. 环路运输
  7. ROS开发指令
  8. 在java的继承中你是否有这样的疑惑?
  9. 微信小程序文件上传结合lin ul
  10. laravel报错 : laravel Please provide a valid cache path