索引 加快查找 可以理解为创建了一个索引目录每次查找会在目录中找到位置.(例子:字典)
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 子句中的字段不该创建索引
不精确<> 不确定的不能
网友评论