索引有哪些并解释下回表查询,索引覆盖和索引下推,如何开启慢查询?

索引分两类聚集索引和非聚集索引

聚集索引决定数据在磁盘上的物理排序叶子节点存储行记录,一个表只能有一个聚集索引。类似与字典目录索引。在innodb中主键索引是聚集索引(主键只是确定表格逻辑组织方式)。如果表没有定义主键,则第一个not NULL unique列是聚集索引, 否则,InnoDB会创建一个隐藏的row-id作为聚集索引;

非聚集索引(二级索引):叶子节点存储聚集索引所覆盖的数据和主键值 ,有5种索引(普通索引、联合索引、哈希索引、全文索引、唯一索引)

普通索引:单个字段的b+树索引

联合索引多个字段上建立的索引,最左匹配规则,能够加速复合查询条件的检索。

Hash索引:Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,只适用于等值查询的场景,没办法利用索引完成排序, 不支持多列联合索引的最左匹配规则InnoDB用户无法手动创建哈希索引,这一层上说,InnoDB确实不支持

InnoDB会自调优,如果判定建立自适应哈希索引,能够提升查询效率,InnoDB自己会建立相关哈希索引

全文索引(fulltext)通过关键字在词典中匹配来进行查询过滤,查询时格式match(field)  against(待查字典字符串,逗号分隔)

唯一索引:与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一.主键索引是特殊的唯一索引, 不允许有空值

回表查询

先通过非聚集索引定位到主键值, 在通过聚集索引定位到行记录, 它的性能较扫一遍索引树更低。

索引覆盖:

如果select的列包含在所建的索引中,则直接在二级索引上就可以查到对应值,不需要通过rowId经过回表去查聚集索引。

索引条件下推index condition pushdown

存储引擎通过在二级索引(只在二级索引这生效)这里过滤主键值减少需要回表的次数,就不需要全部查询出来后在server端过滤目标就是为了减少访问表的完整行数从而减少 I/O 操作。

慢查询开启:

两种方式一种修改配置,

另一种修改变量(变量重启失效)

set global slow_query_log='ON';

开启存储位置:

set global slow_query_log_file=‘地址’

设置超过多少时间即记录慢sql

set global long_query_time=设置秒;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的索引有多种类型,常见的包括: 1. B-Tree索引是一种常见的索引类型,用于等值查找和范围查询。它通过将索引键值按顺序存储在B-Tree数据结构中,以提供高效的查找和排序。 2. 哈希索引:适用于等值查找,但不支持范围查询。它将索引键值计算为哈希值,并将其存储在哈希表中,以实现快速的查找操作。 3. 全文索引:用于对文本内容进行全文搜索。它可以在文本中查找关键词,并返回匹配的结果。 4. 空间索引:用于支持空间数据类型的查询,例如地理位置数据。 关于索引的结构,常见的是B-Tree索引结构。B-Tree索引使用平衡树的数据结构,其中每个节点存储多个索引键值,并按照键值的顺序进行排序。这种结构使得在查找、插入和删除操作时能够高效地定位到目标数据。 回表(Index Lookups)是指当使用非聚集索引进行查询时,如果需要获取其他列的数据,则需要通过回表操作访问主索引或聚集索引来获取完整的行数据。这会增加额外的IO开销。 覆盖索引(Covering Index)是指查询所需的数据可以完全通过索引来获取,而不需要回表操作。当查询只需要索引列的数据时,通过覆盖索引可以减少IO开销,提高查询性能。 索引下推(Index Condition Pushdown)是MySQL 5.6版本引入的优化技术。它可以在B-Tree索引中对谓词进行评估,并尽可能地减少回表操作。通过将索引列上的谓词下推到存储引擎层,在索引上进行过滤,可以减少不必要的IO开销和数据传输。 这些索引类型和结构的选择和使用会对MySQL的查询性能产生重要影响,根据具体的业务需求和查询模式,选择合适的索引类型和优化策略是提高MySQL性能的关键。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值