mysql-索引-Index

一、索引:Index:

  • 1、命名规范:首单词字母小写第二单词开始每个单词首字母大写;
  • 2、mysql:查询方面主要两种方式:全盘扫描、按照索引查询
  • 3、索引排序:mysql数据库中索引需要排序,数据结构是:B-Tree 数据结构; 遵循左小右大原则存放,采用中序遍历方式遍历
  • 4、索引作用:为缩小扫描范围而存在的机制。(缩小扫描区间) 是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制;
  •  一张表的一个字段可以添加一个索引,多个字段联合起来也可以添加索引
  • 5、索引实现原理:主键,以及unique 字段上都会自动添加索引的!

二、索引:什么条件下,我们会考虑给字段添加索引

  • 条件1:数据量庞大(这个需要测试,每一个硬件环境不同)
  • 条件2:该字段经常出现在where后面,以条件形式存在, 也就是这个字段经常被扫描。
  • 条件3:该字段很少DML(增删改查:insert、delete、update)操作,(因为DML之后索引需要重新排序)
  • 建议不要随意添加索引,索引是需要随时维护,太多的话反而会降低系统性能,建议通过unique约束字段进行,查询效率也是比较高的;

三、索引:Index 创建:

  • 创建索引:create index emp_ename_index on emp(ename);
  • 删除索引:drop index emp_ename_index on emp;
  • 在mysql中如何查看一个字段是否使用了索引? explain select * from emp where ename = 'KING';

 

四、索引失效:模糊查询、使用关键字or(两边条件字段都有索引不会失效)、复合索引、索引字段参加运算

  • 1、模糊查询:ename上即使添加索引也不会走索引,原因是模糊匹配当中以“%”开始,尽量避免模糊查询时使用%开始;
  •      失效语句:select *from emp where ename like '%T';
  • 2、失效第二种情况: 使用or 的时候会失效,如果使用or那么要求or两边的条件字段都要有; 索引,才会使用索引。
  •    失效语句: explain select * from emp where ename ='KING'or job = 'MANAGER;'
  • 3、失效的第三种情况: 使用复合索引,没有使用左侧的列查找,索引失效;查询时使用左侧列查询不会失效。使用右侧列查询失效
  • 语句:create index  emp_job_sal_index on emp (job(左侧列),sal(右侧列));
  • 左侧列查询不会失效:explain select * from emp where job = 'MANAGER';
  • 右侧列查询失效: explain select *from emp where sal = 800;
  •                               explain select *from emp where sal = 800;
  • 4、where中索引列字段(sal+1)参加运算,索引失效, 在where当中索引列使用了函数
posted @ 2022-04-13 22:55  280887072  阅读(55)  评论(0编辑  收藏  举报