约束和索引
Posted pengdt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约束和索引相关的知识,希望对你有一定的参考价值。
约束
作用:是为了保证数据的完整性而实现的摘自一套机制,它具体的根据各个不同的数据库的实现而有不同的工具(约束);
- 非空约束: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` )
以上是关于约束和索引的主要内容,如果未能解决你的问题,请参考以下文章