数据库原理学习二之数据库优化

  1. 数据库三范式
    第一范式:1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF)
    第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识(如主键),即实体的惟一性;
    第三范式:3NF是对字段冗余性的约束,它要求字段没有冗余。 没有冗余的数据库设计可以做到。(但在实际开发中,允许冗余的存在)。
  2. Mysql的优化技术
    对数据库进行优化主要从四个方面入手: 数据库设计,sql语句优化,数据库参数配置,恰当的硬件资源和操作系统,在mysql中有以下几种优化技术:
    1)表的设计合理化(符合3NF)
    2)添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]
    3)分表技术(使用mycat对表进行水平分割、垂直分割)
    4)读写[写: update/delete/add]分离
    5)存储过程 [模块化编程,可以提高速度]
    6)对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]
    7)mysql服务器硬件升级
    8)定时的去清除不需要的数据,定时进行碎片整理(MyISAM)
  • sql语句优化:通过show status命令了解各种SQL的执行频率;定位执行效率较低的SQL语句(主要是查询语句);通过explain分析低效率的SQL;确定问题并采取相应的优化措施。
    1) Sql的语句分类:
    Ddl数据定义语言(create alter drop truncate…)
    Dml数据操作语言(select insert update delete)
    Dtl 数据事物语言(commit rollback savepoint)
    Dcl(数据控制语言) grant revoke
    注:drop删除表结构释放空间,truncate清空数据但保留表结构,delete只删除指定行数据。
    2)创建存储过程、函数、游标、方法使sql语句模块化
    创建存储过程示例:
--创建一个存储过程用于根据部门号查询该部门所有的员工
create procedure findempbydept(dno number)
is
   cursor cs_emp is select * from emp where deptno=dno;
   my_emp emp%rowtype;
begin 
  for my_emp in cs_emp loop
    dbms_output.put_line(my_emp.ename);
  end loop;
  exception
    when others then
      dbms_output.put_line('程序出错');
end;
--给过程授权
grant excute on findempbydept to public;
--使用创建的存储过程查询10号部门的员工
begin
  findempbydept(10);
end;

创建函数示例:

--创建函数根据员工编号查询员工姓名
create or replace function find_empbyno(v_no number)
return varchar2 is
       v_name varchar2(10);
begin
  select ename into v_name from emp where empno=v_no;
  return v_name;
end;
--查询员工编号为7788的员工姓名
begin
  dbms_output.put_line(find_empbyno(7788));
end;

你可能感兴趣的:(个人总结,数据库学习)