Mysql索引

索引 加快查找 可以理解为创建了一个索引目录每次查找会在目录中找到位置.(例子:字典)

1.占用内存磁盘

2.目的 快速查找 对于主键有

3.普通索引 主键索引 联合索引 唯一索引

4.联合索引(多列组成的)) 最左边匹配 第一个必须是最左 其他随意匹配包含最左即可

普通的列组成 index 索引名称(列1)

主键联合索引 primary key(列1,列2,)

唯一联合索引 unique key(列1,列2,)

在已经存在的表中添加索引:

alter table 表名 add 列名 数据类型 约束 primary key();

alter table 表名 add 列名 数据类型 约束 unique key();

添加普通索引:

create index 索引名称 on tablename(列,..) on表示在哪一个表里面

添加唯一索引:

create unique index 索引名称 on tablename(列,..)

删除一个索引:

drop index 索引名称 on 表名

删除唯一索引:

drop unique index 索引名称 on 表名

如何修改索引名称???

索引根据搜索引擎分类:

设置索引和不设置索引的区别:
不设置:从上往下依次查找

设置 :会额外生成一个数据文件(索引文件)

hash 索引:memary 基于内存的存储引擎

索引表(根据列的值生成哈希值) 并且记录当前列在表中的地址这个hash表的索引

存储顺序跟我们的表的顺序不一致 查寻单个较快

btree 索引:(二叉树算法)几乎支持所有的存储引擎

查找的速度相对快

两个名词的概念:

覆盖索引:select name from 表名 where name='张三';

    前后保持一致

    建立索引后 查寻数据时直接在索引形成的索引文件中查找 不会再去数据表中查寻

索引的合并:

    name,email,phone,多个索引为查寻条件

    select * from 表名 where name='值' and email='值'

注意点

创建索引的时候要注意的知识:

1.创建一个索引,提高了查找效率 牺牲了增删改的效率

2.会加大磁盘空间的开销

3.设置最短索引

text 文本很长不设置会显示所有 可以截取索引

create index indeaname on 表名(列(16))

4.命中索引:

主键除外

索引选择原则

较频繁的作为查询条件的字段应该创建索引

唯一性太差的字段不适合单独创建索引,即频繁作为查询条件

更新非常频繁的字段不适合创建索引

不会出现在 WHERE 子句中的字段不该创建索引

不精确<> 不确定的不能

你可能感兴趣的:(Mysql索引)