索引(Index)

索引(Index)是帮助 MySQL 高效获取数据的数据结构。常见的查询算法,顺序查找,二分查找,二叉排序树查找,哈希散列法,分块查找,平衡多路搜索树 B 树(B-tree)

常见索引原则
  • 1.选择唯一性索引

    唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。

  • 2.为经常需要排序、分组和联合操作的字段建立索引:

  • 3.为常作为查询条件的字段建立索引。

  • 4.限制索引的数目:

    越多的索引,会使更新表变得很浪费时间。
    尽量使用数据量少的索引

  • 6.如果索引的值很长,那么查询的速度会受到影响。
    尽量使用前缀来索引

  • 7.如果索引字段的值很长,最好使用值的前缀来索引。
    删除不再使用或者很少使用的索引

  • 8 . 最左前缀匹配原则,非常重要的原则。

  • 10 . 尽量选择区分度高的列作为索引
    区分度的公式是表示字段不重复的比例

  • 11 .索引列不能参与计算,保持列“干净”:带函数的查询不参与索引。

  • 12 .尽量的扩展索引,不要新建索引。

数据库三范式

范式是具有最小冗余的表结构。3 范式具体如下:

  • 第一范式(1st NF -列都是不可再分)

第一范式的目标是确保每列的原子性:如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

  • 第二范式(2nd NF-每个表只描述一件事情)

首先满足第一范式,并且表中非主键列不存在对主键的部分依赖。 第二范式要求每个表只描述一件事情。

  • 第三范式(3rd NF- 不存在对非主键列的传递依赖)

第三范式定义是,满足第二范式,并且表中的列不存在对非主键列的传递依赖。除了主键订单编
号外,顾客姓名依赖于非主键顾客编号。

数据库事务

事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行 。事务是一个不可分割的工作逻辑单元事务必须具备以下四个属性,简称 ACID 属性:

  • 原子性(Atomicity)

    事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。

  • 一致性(Consistency)

    当事务完成时,数据必须处于一致状态。

  • 隔离性(Isolation)

    对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。

  • 永久性(Durability)

    事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。

存储过程(特定功能的 SQL 语句集)

一组为了完成特定功能的 SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

存储过程优化思路:

  1. 尽量利用一些 sql 语句来替代一些小循环,例如聚合函数,求平均函数等。
  2. 中间结果存放于临时表,加索引。
  3. 少使用游标。sql 是个集合语言,对于集合运算具有较高性能。而 cursors 是过程运算。比如对一个 100 万行的数据进行查询。游标需要读表 100 万次,而不使用游标则只需要少量几次读取。
  4. 事务越短越好。sqlserver 支持并发操作。如果事务过多过长,或者隔离级别过高,都会造成并发操作的阻塞,死锁。导致查询极慢,cpu 占用率极地。
  5. 使用 try-catch 处理错误异常。
  6. 查找语句尽量不要放在循环内。

触发器(一段能自动执行的程序)

触发器是一段能自动执行的程序,是一种特殊的存储过程,触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作时触发。诸如:update、insert、delete 这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005 中触发器可以分为两类:DML 触发器和DDL 触发器,其中 DDL 触发器它们会影响多种数据定义语言语句而激发,这些语句有 create、alter、drop 语句。

作者:Jeebiz  创建时间:2020-05-29 12:54
 更新时间:2023-12-22 21:08