做网站找人,用自己电脑做网站服务器-phpstudy+花生壳,网站静态页面,中国职业培训在线平台索引是对数据库表中一列或多列的值进行排序的一种结构#xff0c;使用索引可快速访问数据库表中的特定信息。 1. 什么是索引
官方上面说索引是帮助MySQL高效获取数据的数据结构#xff0c;通俗点来说#xff0c;数据库索引就像是是一本书的目录#xff0c;可以直接根据页码… 索引是对数据库表中一列或多列的值进行排序的一种结构使用索引可快速访问数据库表中的特定信息。 1. 什么是索引
官方上面说索引是帮助MySQL高效获取数据的数据结构通俗点来说数据库索引就像是是一本书的目录可以直接根据页码找到对应的内容目的就是为了加快数据库的查询速度。
2. 索引原理
数据结构一般是 B树平衡树作为其数据结构因为B树在插入、删除和查找操作中都具有良好的性能。也可能是使用哈希表通俗来讲就是用空间替换时间 但是为什么是B树而不是B树呢原因有两点 B树每个节点中不仅包含数据的key值还有data值。而每一个页的存储空间是有限的如果data数据较大时将会导致每个节点能存储的key的数量很小要保存同样多的key就需要增加树的高度。树的高度每增加一层查询时的磁盘I/O次数就增加一次进而影响查询效率。而在BTree中所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上而非叶子节点上只存储key值信息这样可以大大加大每个节点存储的key值数量降低B树的高度。B树的叶子节点上有指针进行相连因此在做数据遍历的时候只需要对叶子节点进行遍历即可这个特性使得B树非常适合做范围查询。 3. 索引分类 主键索引primary key 设定为主键后数据库自动建立索引InnoDB为聚簇索引主键索引列值不能为空Null 唯一索引 索引列的值必须唯一但允许有空值Null但只允许有一个空值Null 复合索引 一个索引可以包含多个列多个列共同构成一个复合索引 全文索引 Full TextMySQL5.7之前只有MYISAM存储引擎引擎支持全文索引全文索引类型为FULLTEXT在定义索引的列上支持值的全文查找允许在这些索引列中插入重复值和空值。全文索引可以在Char、VarChar 上创建 空间索引 MySQL在5.7之后的版本支持了空间索引而且支持OpenGIS几何数据模型MySQL在空间索引这方年遵循OpenGIS几何数据模型规则 前缀索引 在文本类型为char、varchar、text类列上创建索引时可以指定索引列的长度但是数值类型不能指定
4. 索引的优缺点 优点 大大提高数据查询速度。 可以提高数据检索的效率降低数据库的IO成本类似于书的目录。 通过索引列对数据进行排序降低数据的排序成本降低了CPU的消耗。 被索引的列会自动进行排序包括【单例索引】和【组合索引】只是组合索引的排序需要复杂一些。 如果按照索引列的顺序进行排序对order 不用语句来说效率就会提高很多。 缺点 索引会占据磁盘空间。 索引虽然会提高查询效率但是会降低更新表的效率。比如每次对表进行增删改查操作MySQL不仅要保存数据还有保存或者更新对应的索引文件。 维护索引需要消耗数据库资源。
5. 创建索引
- 创建主键索引#建表时主键默认为索引
create table user(id varchar(11) primary key,name varchar(20),age int
)#查看user表中的索引
show index from user;创建单列索引
#创建单列索引只能包含一个字段
create index name_index on user(name);创建唯一索引
#创建唯一索引只能有一个列
create unique index age_index on user(age);创建符合索引
#复合索引
create index name_age_index on user(name,age);下次讲 sql 的优化其中也有关于索引的操作~