[TOC]
## 什么是回表查詢?
首先,我們都知道Mysql Innodb索引的葉子節點直接綁定著數據,但實際上只有`主鍵索引`下,才會綁定所有的數據。還有另外一種`非主鍵索引`,其下方掛載的數據實際上是主鍵的id值。
根據非主鍵索引查詢到主鍵后,再從主鍵索引中查詢其他數據,這個過程就是**回表查詢**。

## 優化回表查詢
優化回表查詢的兩種方式:
- 索引覆蓋:基本思路是在非主鍵索引中增加必要的返回數據,創建聯合索引可以解決。
- 索引下推:這是Mysql5.6版本中的一個優化配置,聯合索引的后面的字段可以作為搜索條件過濾返回的主鍵值——目的是返回較少的主鍵值,從而減少回表次數。
> 索引覆蓋、索引下推,都是在非主鍵索引的基礎上優化為聯合索引,從而減少回表次數的SQL優化方式。
### 背景
多查詢了一個屬性,為何檢索過程完全不同?
```
select id,name where name='shenjian'
select id,name,sex where name='shenjian'
```
## 什么是索引覆蓋?
## 如何實現索引覆蓋?
## 哪些場景,可以利用索引覆蓋來優化SQL?
## 什么是索引下推?
索引下推在**非主鍵索引**上的優化,可以有效減少回表的次數,大大提升了查詢的效率。explain解析結果中的Extra值為`Using index condition`。
開啟方式:
~~~sql
set optimizer_switch='index_condition_pushdown=on';
~~~
- 前言
- 第一部分 計算機網絡與操作系統
- 大量的 TIME_WAIT 狀態 TCP 連接,對業務有什么影響?怎么處理?
- 性能占用
- 第二部分 Java基礎
- 2-1 JVM
- JVM整體結構
- 方法區
- JVM的生命周期
- 堆對象結構
- 垃圾回收
- 調優案例
- 類加載機制
- 執行引擎
- 類文件結構
- 2-2 多線程
- 線程狀態
- 鎖與阻塞
- 悲觀鎖與樂觀鎖
- 阻塞隊列
- ConcurrentHashMap
- 線程池
- 線程框架
- 徹底搞懂AQS
- 2-3 Spring框架基礎
- Spring注解
- Spring IoC 和 AOP 的理解
- Spring工作原理
- 2-4 集合框架
- 死磕HashMap
- 第三部分 高級編程
- Socket與NIO
- 緩沖區
- Bybuffer
- BIO、NIO、AIO
- Netty的工作原理
- Netty高性能原因
- Rabbitmq
- mq消息可靠性是怎么保障的?
- 認證授權
- 第四部分 數據存儲
- 第1章 mysql篇
- MySQL主從一致性
- Mysql的數據組織方式
- Mysql性能優化
- 數據庫中的樂觀鎖與悲觀鎖
- 深度分頁
- 從一條SQL語句看Mysql的工作流程
- 第2章 Redis
- Redis緩存
- redis key過期策略
- 數據持久化
- 基于Redis分布式鎖的實現
- Redis高可用
- 第3章 Elasticsearch
- 全文查詢為什么快
- battle with mysql
- 第五部分 數據結構與算法
- 常見算法題
- 基于數組實現的一個隊列
- 第六部分 真實面試案例
- 初級開發面試材料
- 答案部分
- 現場編碼
- 第七部分 面試官角度
- 第八部分 計算機基礎
- 第九部分 微服務
- OpenFeign工作原理