• 约束和索引


    约束

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

    • 非空约束: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` )
    
  • 相关阅读:
    sqlachemy查询对象转化成字典/json使用
    pandas DF去重
    flask request和response
    flask路由要点
    flask项目结构
    __init__.py在导包中起到的作用
    git 查看修改账号密码
    02.flask-script
    vue点击父组件里面的列表动态传值到子组件
    安卓手机点击背景图会出现预览的情况
  • 原文地址:https://www.cnblogs.com/pengdt/p/12240670.html
Copyright © 2020-2023  润新知