索引是什么
索引(index)是在数据库表的字段中添加,是为了提高查询效率存在的一种机制。
索引相当于书的目录,为了缩小搜索范围而存在的一种机制。想要查找表中的数据,有索引会精准查找,效率更高。
任何数据库中,主键会自动添加索引对象。
任何数据库中,任何一张表中一行记录在硬盘上存储都有一个硬盘的物理存储编号。
在MySQL中,索引是一个单独的对象,不同的存储引擎存储方式不同。
一张表中索引个数
一张表中一个字段可以添加一个索引,也可以多个字段联合起来添加索引。
mysql查询方式
- 全表查询
- 按照索引检索。
索引也要排序
索引排序和TreeSet一样。底层是自平衡二叉树。遵循左小右大的原则,采用中序的遍历方式。中序就是中左右的方式。
哪里添加索引
在MySQL中,主键上以及unique字段上都会自动添加索引。
- 数据量庞大就添加索引,这个和硬件相关,硬件越牛逼,就不需要创建索引。
- 该字段经常出现在where 后面,以条件的形式存在。
- 该字段很少DML操作(insert,update,delerte),就要添加索引。
- 子段的唯一性越高,添加索引查询效率越高。
创建(添加)索引(index)
--给单一字段添加索引
create index 索引名 on 表名(字段);
--给多个字段添加联合索引
create index 索引名 on 表名(字段1,字段2...);
删除索引
drop index 索引名 on 表名;
--这样就删除了一张表中某个索引
查看一个SQL语句是否使用索引
explain select * from t_user where name = 'zhangsan';
--explain 加上查询语句
--查询语句前面加上explain
索引失效
- 模糊查询以%开头。例如
select name from t_user where name like '%san';
- .or两边字段都有索引才会用索引,只要有一个没有索引,那么就不会优先使用索引查询。
- 很多时候可以让索引失效…请参考其他文章,视频等。