不建立索引查找一条数据 mysql就会从第一条开始全表扫描
mysql 索引就是排好序的数据结构
mysql 索引的数据结构
1.二叉树--->性能不高,也是全表扫描
2.红黑树-->有二叉树的特性 红黑树比二叉树的效率高
3.hash表
4.B-tree
mysql用的索引用的数据结构是B+树
索引失效的的情况
1.like以%开头索引无效 like以%后缀的索引有效
2.or语句前后不是都为索引时失效
3.在索引列上加函数,计算,以及类型转换索引无效
索引的原理 以文件的形式存储在磁盘中,原理为以空间换时间
mysql索引的创建的原理是提升查询
- 存储方式区分
物理上分为 B-树索引和 HASH 索引两类
mysql索引的五种种类型
1.主键索引
2.唯一索引
3.普通索引 单列索引
4.全文索引
5.组合索引 复合索引
具体解释
① 普通索引(单列索引) 普通索引(单列索引):单列索引是最基本的索引,它没有任何限制。
② 复合索引(组合索引) 复合索引:复合索引是在多个字段上创建的索引。复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第一个字段,索引才会被使用。因此,在复合索引中索引列的顺序至关重要
③ 唯一索引
唯一索引:唯一索引和普通索引类似,主要的区别在于,唯一索引限制列的值必须唯一,但允许存在空值(只允许存在一条空值)。
④ 主键索引 主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引:
⑤ 全文索引
在一般情况下,模糊查询都是通过 like 的方式进行查询。但是,对于海量数据,这并不是一个好办法,在 like “value%” 可以使用索引,但是对于 like “%value%” 这样的方式,执行全表查询,这在数据量小的表,不存在性能问题,但是对于海量数据,全表扫描是非常可怕的事情,所以 like 进行模糊匹配性能很差。
目前只是在varchar char text上支持全文索引
主键索引和唯一索引的区别
唯一索引允许有空值
查询表中索引的语句
show index form table
索引创造的地方
1.在经常要搜索的列上
2.在作为主键的列上
3.在经常链接的join列上
4.经常根据范围查询的列上
5.排序的列上
6.where查询的列上
创建索引
creat index 索引名称 on 表明(字段名称)
删除索引
drop index 索引名称 on 表明
索引创建的地方
where 从句
group by 从句
order by 从句
on 从句
索引的缺点
1.索引需要空间成本,每一条索引都要占据物理存储空间
2.会降低表的增删改的效率
mysql索引优化
1.选择合适的字段建立索引
2.Explain优化查询检测
3.遵循最左的原则最左前缀匹配原则
4.不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
5.Like查询要当心,%不要放第一
6.只访问索引的查询(索引列和查询列一致),减少select * 查出来的都是索引
7.mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描
8.OR改UNION效率高