索引:索引是对数据库表中一列或者多列值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。
索引是在存储引擎中实现的。mysql中索引的存储类型有两种,BTREE和HASH。
索引分类:
普通索引:允许插入重复值和空值。
唯一索引:索引列值唯一,允许有空值。组合索引,列值组合必须唯一。主键索引是一种特殊的唯一索引,不允许为空。
单列索引:一个索引只有一列,一张表可以有多个单列索引。
组合索引:多个字段组合的索引。
全文索引:FULLTEXT。支持全文查找,允许在这些列中插入重复值和空值。可在char,varchar,text类型的列上创建。mysql中只支持MyISAM存储引擎支持全文索引。
空间索引:对空间数据类型的字段建立的索引。
索引的设计原则:
创建普通索引
Explain语句输出结果的各个行解释如下:
创建唯一索引:
创建单列索引:
单列索引是数据表中的某一个字段上创建的一个索引,一个表中可以创建多个单列索引。
创建组合索引:
创建全文索引:
创建空间索引:
空间索引必须建在MyISAM类型的表中创建,并且空间类型的字段上必须为非空。
删除索引:
alter table table_name drop index index_name
drop index index_name on table_name
数据库三范式:
第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。
第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。