zoukankan      html  css  js  c++  java
  • mysql中的覆盖索引,二级索引和索引排序

    MySQL覆盖索引,也叫包含索引,通过查看explain中extra列是否有using index判断是否使用覆盖索引。因为覆盖索引要存储索引列的值,所以哈希索引,空间索引,全文索引都不存储索引列的值,MySQL只能使用B-Tree索引做覆盖索引。
    innodb的二级索引有唯一索引、普通索引、前缀索引等。二级索引只存储了主键值,相比于聚簇索引,占用的空间要少,意味着innodb的二级索引可以利用这些额外的主键列来做覆盖索引,select actor_id,last_name from table where last_name='ss'(其中actor_id是主键列,last_name是二级索引列)。
    MySQL中innodb在二级索引上使用共享锁,但访问主键索引需要排他锁。
    延迟关联就是使用覆盖索引查询返回需要的主键,再根据这些主键关联原表获得需要的行,这样减少MySQL扫描那些需要丢弃的行,select … from … where id>(select id from … where …)或者select … from a inner join (select id from a where … order by … limit 100000, 10) as x using id;

    只有当索引的列顺序和order by子句的顺序完全一致,MySQL才能够使用索引做排序,还有满足最左前缀匹配原则,如果不满足可以指定索引列的值为常量,也可以使用联合索引,第一个列是常量t,第二列m进行排序,select … from … where t='' order by m desc;

  • 相关阅读:
    CentOS安装 Docker
    检测zookeeper和kafka是否正常
    开机自启动redis
    java学习笔记14--多线程编程基础1
    java学习笔记13--反射机制与动态代理
    JobControl 的实现原理
    Hadoop中Partition深度解析
    Mapper 与 Reducer 解析
    hadoop中OutputFormat 接口的设计与实现
    hadoop中InputFormat 接口的设计与实现
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/13380970.html
Copyright © 2011-2022 走看看