zoukankan      html  css  js  c++  java
  • 约束和索引

    约束

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

    • 非空约束: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` )
    
  • 相关阅读:
    java+opencv实现图像灰度化
    java实现高斯平滑
    hdu 3415 单调队列
    POJ 3368 Frequent values 线段树区间合并
    UVA 11795 Mega Man's Mission 状态DP
    UVA 11552 Fewest Flops DP
    UVA 10534 Wavio Sequence DP LIS
    UVA 1424 uvalive 4256 Salesmen 简单DP
    UVA 1099 uvalive 4794 Sharing Chocolate 状态DP
    UVA 1169uvalive 3983 Robotruck 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/pengdt/p/12240670.html
Copyright © 2011-2022 走看看