约束和索引

约束

作用:是为了保证数据的完整性而实现的摘自一套机制,它具体的根据各个不同的数据库的实现而有不同的工具(约束);

  • 非空约束:not null;
  • 唯一约束:unique;
  • 主键约束:primary key; 主键约束 = not null + unique
  • 外键约束
  • 自增约束:auto_increment
  • 默认值约束:default

索引

作用:快速定位特定数据,提高查询效率,确保数据的唯一性,快速定位特定数据;可以加速表和表之间的连接,实现表与表之间的参照完整性,使用分组和排序语句进行数据检索时,可以显著减少分组和排序的时间全文检索字段进行搜索优化;

  • 普通索引
  • 唯一索引(普通索引加唯一判断)
  • 主键索引(唯一索引但是不能为null)

使用索引的优点

  • 加快数据的检索速度
  • 加快表之间的连接
  • 减少分组和排序时间
  • 使用优化隐藏器提高系统性能

使用索引的原则

  • 在需要经常搜索的列上创建索引
  • 主键上创建索引
  • 经常用于连接的列上创建索引
  • 经常需要根据范围进行搜索的列上创建索引
  • 经常需要排序的列上创建索引
  • 经常用于where子句的列上创建索引(重点)

不创建索引的原则

  • 查询很少使用和参考的列不建索引
  • 对只有少数值的列不建索引
  • 定义为text、image、bit的列不建索引
  • 当需要update性能远远高于select性能时不应建索引

买一送一

  • 设置主键约束时会送唯一索引
  • 建立唯一约束的时候,也会自动的创建唯一索引
  • 主键

个人对于买一送一的理解,不应该理解为设置约束送索引,而是索引是约束的核心组成部分,我给id字段添加了主键约束,在上面的理解是【主键约束 = 非空约束 + 唯一约束】,改成【主键约束 = 主键索引】,不仅查找的时候索引发挥作用,删除,添加,修改也一样,用js代码理解一下

// 往table插入一个key-value的方法
function insert(table,key,value){
   if(table的key是主键){
      // 主键索引的非空判断
      if(value){
         // 判断value是不是唯一的,即主键索引的唯一判断
         // 如果没有索引就是全表搜索,而如果这个字段有索引,就不需要全表了,这个字段会像超市的货架一样,我查一部分,这里没重复就说明没有重复了,这就是索引的存在的意义
         if(key是唯一的){
            // 插入,这不是正常的插入,不是数组的push,前面说了因为有索引,所以这里也要给这个值增加索引,放到对应的货架上,这反而是变慢了插入的速度,这就比那些没有任何约束的字段来说更加的慢
         }
      }
   }
}

怎么添加索引

# 普通索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

# 唯一索引
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
原文地址:https://www.cnblogs.com/pengdt/p/12240670.html