zoukankan      html  css  js  c++  java
  • MySQL回表查询

    一.MySQL索引类型

    1.普通索引:最基本的索引,没有任何限制

    2.唯一索引(unique index):索引列的值必须唯一,但是允许为空

    3.主键索引:特殊的唯一索引,但是不允许为空,一般在建表的时候同时创建主键索引

    4.组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组个索引时遵循最左前缀集合

    5.全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较

    二.回表查询

    什么是回表查询?

    首先,从InnoDB说起,InnoDB的索引有两种,聚集索引(clustered index)和普通索引(secondary index),聚集索引的叶子结点存储的是行记录,若表定义了PK,那么PK就是聚集索引(因此PK查询非常快,直接定位行记录),若表没有定义PK,那么第一个not null unique列就是聚集索引。普通索引的叶子结点存储的是主键值。

    如:t(id PK, name KEY, sex, flag);id为聚集索引,name为普通索引

    查询

    select * from t where name='lisi'; 

     

    执行过程:

    对于聚集索引,直接定位行记录

    对于普通索引,需要遍历两遍索引树,如下图所示,先通过普通索引定位到id,再通过聚集索引定位到行记录。

    这就是所谓的回表查询,先定位主键值,再定位行记录,性能比聚集索引低。

    所以,避免回表查询?

    直接使用聚集索引(主键或者第一个唯一索引)即可。

  • 相关阅读:
    python操作csv,对比两个csv文件某列值
    监控端口和僵尸进程脚本
    openldap创建只读账号
    shell 判断文件内容是否改变
    golang调用shell命令标准输出阻塞管道
    fexpect 源码
    python pexpect 免交互自动恢复gitlab数据
    consul client agent 本地读取key value
    pip 安装三方库报超时
    微信小程序滚动tab的实现
  • 原文地址:https://www.cnblogs.com/xiuercui/p/13453226.html
Copyright © 2011-2022 走看看