加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_常德站长网 (https://www.0736zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql中索引的作用是什么_详解mysql中索引的作用

发布时间:2022-10-10 15:24:26 所属栏目:MySql教程 来源:
导读:  1. 索引是什么,首先我们可以举个例子,字典大家应该都使用过,我们可以使用目录快速定位到所要查找的内容,那么索引跟目录的作用类似,在数据库表记录中,利用索引,可以快速过滤查找到数据记录。

  2. 索
  1. 索引是什么,首先我们可以举个例子,字典大家应该都使用过,我们可以使用目录快速定位到所要查找的内容,那么索引跟目录的作用类似,在数据库表记录中,利用索引,可以快速过滤查找到数据记录。
 
  2. 索引类型分类
 
  2.1 普通索引
 
  加快查询速度
 
  2.2 唯一索引
 
  加快查询速度,并且可以限制列值的唯一性,允许为空
 
  唯一索引包括联合唯一索引,多列形成的唯一索引,这些列可以唯一确定一条表记录,可以为空
 
  2.3 全文索引
 
  主要针对文本的内容进行分词,加快查询速度
 
  2.4 联合索引
 
  多列组成的索引,查询效率提升高于多个单列索引合并的效率
 
  2.5 主键索引
 
  主键唯一性,加快查询速度,不能为空
 
  3. 索引结构分类
 
  索引有很多分类,例如B-tree索引,哈希索引mysql作用,全文索引等等,索引的实现是在存储引擎层,并不是在后端服务器层,所以不同的存储引擎支持的索引结构也不一定一样
 
  3.1B-tree索引
 
  B-tree 索引普遍存在于存储引擎中,他使用B-tree数据结构来存储数据,如果对树形数据结构比较了解的话,就知道B-tree索引所带来的好处了,他的每个叶子节点都会包含下一个节点的指针,非常方便查询数据
 
  B-tree 适用于全键值,键值范围,或者前缀查找
 
  3.2哈希索引
 
  哈希索引基于哈希表实现,对于每一行数据,存储引擎会对所有的索引列计算一个哈希码,然后存储引擎会基于这个哈希码来查找数据,小编感觉有点像HashMap 中槽的查询过程
 
  3.3 全文索引
 
  全文索引在几种索引结构类型中比较特殊,他查找的是文本中关键词
 
  4. 索引的正确使用
 
  索引是建立在系统文件上的,会占用一定的内存空间,另外数据在更新的时候也会去维护索引,消耗内存,所以索引一定要正确的使用,索引并不是越多越好,要根据具体的查询业务来规划索引的建立。
 
  建议不要使用索引的几种情况:
 
  1. 区分度不是很大的字段,例如 性别 sex
 
  2. 频繁更新的字段
 
  3. 字符串类型的字段 或者 文本类型的字段
 
  4. 不在where列中出现的索引
 
  索引失效的几种情况:
 
  1. 查询列中有函数计算
 
  2. 查询列中有模糊查询,"%cloum",可以使用"cloum%" 代替,如果要使用"%column%",那么select 列中是索引列
 
  3. 如果查询条件中有or, 索引会失效,除非所有条件都加上索引
 
  4. 使用不等于(!= 或者 )
 
  5. is null 或者 is not null
 
  6. 字符串不加引号,会导致索引失效
 
  7. 最左原则,联合索引中会遵循最左原则,即如果要使用联合索引,那么前面的索引列一定要包含,举个例子,
 
  有个联合索引(a,b,c) 那么查询条件中只能是 a=1 或者 a=1 and b=1 或者 a=1 and b=1 and c=1,不然索引就会失效
 
  5. explain 分析查询sql
 
  caf68abf0a24c3012d152bbf6e8f8b35.png
 
  select_type :
 
  SIMPLE: 简单的查询,不包括子查询,关联查询等等
 
  PRIMARY: 查询中如果有复杂的部分,最外层的查询将被标记为PRIMARY
 
  SUBQUERY: 子查询中的第一个查询
 
  UNION: 关联查询,最后面的一个
 
  ..............
 
  type:查询语句的性能表现: 依次递增 all
 
  All: 全表扫描,最耗性能
 
  index: 全索引列扫描
 
  range: 对单个索引列进行范围查找 ,使用 < 或者 between and 或者 in 或者 !=
 
  index_merge: 多个索引合并查询
 
  ref: 根据单个索引查找
 
  eq_ref: 连接时使用primary key 或者 unique类型
 
  constant: 常量
 
  system: 系统
 
  3e87f9ae1baf8a1e4c16f55aebbd46d7.png
 
  possible_keys: 可能使用到的索引
 
  key: 真实使用的索引
 
  key_len: 使用到的索引长度
 
  rows:扫描的行数
 
  extra:包含MySQL为了解决查询的详细信息
 
  6. 慢查询日志
 
  慢查询日志是指 mysql中查询 时间超过固定阈值的查询记录,默认时间是10秒,mysql默认情况下不开启慢查询
 
  默认:show variables like "%slow_query_log%"
 
  9399c3680415aadc2e893f2fde07ddfa.png
 
  手动开启 set global 变量名 = 值
 
  set global slow_query_log = on ; 手动开启慢查询日志
 
  set global long_query_time = 10; 手动设定查询时间超过的值,超过就会记录查询日志
 
  set global slow_query_log_file= "G:\var\slow_log.txt"; 手动设定慢查询日志的记录地址
 
  set global log_queries_not_using_indexs = on ; 手动设定 是否要记录 查询中使用到索引的记录
 

(编辑:应用网_常德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!