1. 程式人生 > >mysql之explain詳解(分析索引的最佳使用)

mysql之explain詳解(分析索引的最佳使用)

在這裡對explain的各個欄位進行詳細的分析,來幫助大家分析自己所寫的sql是否最佳的使用了索引。

首先是select_type:將select查詢分為簡單(simple)和複雜兩種型別 複雜型別又分為子查詢(subquery)和from列表中包含子查詢(drived) simple:drived:
就type進行詳細的介紹:
System,const,eq_ref,ref,range,index,all all : 即全表掃描 index : 按索引次序掃描,先讀索引,再讀實際的行,結果還是全表掃描,主要優點是避免了排序。因為索引是排好的。 range:以範圍的形式掃描。 explain select * from a where a_id > 1\G

ref:非唯一索引訪問(只有普通索引) create table a(a_id int not null, key(a_id)); insert into a values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10); mysql> explain select * from a where a_id=1\G eq_ref:使用唯一索引查詢(主鍵或唯一索引) const:常量查詢 在整個查詢過程中這個表最多隻會有一條匹配的行,比如主鍵 id=1 就肯定只有一行,只需讀取一次表資料便能取得所需的結果,且表資料在分解執行計劃時讀取。 當結果不是一條時,就會變成index或range等其他型別
system:系統查詢 null:優化過程中就已經得到結果,不在訪問表或索引 possible_keys:可能用到的索引 key:實際用到的索引 key_line:索引欄位最大可能使用長度 ref: 指出對 key 列所選擇的索引的查詢方式,常見的值有 const, func, NULL, 具體欄位名。當 key 列為 NULL ,即不使用索引時,此值也相應的為 NULL 。 rows:估計需要掃描的行數
Extra:顯示以上資訊之外的其他資訊 Using index 此查詢使用了覆蓋索引(Covering Index),即通過索引就能返回結果,無需訪問表。 若沒顯示"Using index"表示讀取了表資料。
Using where 表示 MySQL 伺服器從儲存引擎收到行後再進行“後過濾”(Post-filter)。所謂“後過濾”,就是先讀取整行資料,再檢查此行是否符合 where 句的條件,符合就留下,不符合便丟棄。因為檢查是在讀取行後才進行的,所以稱為“後過濾”。 Using temporary 使用到臨時表 建表及插入資料: create table a(a_id int, b_id int); insert into a values(1,1),(1,1),(2,1),(2,2),(3,1); mysql> explain select distinct a_id from a\G
        Extra: Using temporary
MySQL 使用臨時表來實現 distinct 操作。 Using filesort 若查詢所需的排序與使用的索引的排序一致,因為索引是已排序的,因此按索引的順序讀取結果返回,否則,在取得結果後,還需要按查詢所需的順序對結果進行排序,這時就會出現 Using filesort 。 select * from a order by id; 對於沒有索引的列進行order by 就會出現filesort

相關推薦

mysqlexplain分析索引最佳使用

在這裡對explain的各個欄位進行詳細的分析,來幫助大家分析自己所寫的sql是否最佳的使用了索引。 首先是select_type:將select查詢分為簡單(simple)和複雜兩種型別 複雜型別又分為子查詢(subquery)和from列表中包含子查詢(drive

Mysql EXPLAIN

在mysql得使用中,查詢效率低下,除cpu,io或硬體得限制外,作為java程式設計師我們主要關注得還是sql得優化。    使用 EXPLAIN 檢視sql執行計劃    它可以做什麼 1.表得讀取順序   2.資料讀取操作得操作型別   3.哪些索引可以使用   4.哪

hadoopmapreduce進階篇

上篇文章hadoop之mapreduce詳解(基礎篇)我們瞭解了mapreduce的執行過程和shuffle過程,本篇文章主要從mapreduce的元件和輸入輸出方面進行闡述。 一、mapreduce作業控制模組以及其他功能 mapreduce包括作業控制模組,程式設計模型,資料處理引擎。這裡我們重點闡述

hadoopyarn基礎架構篇

本文主要從yarn的基礎架構和yarn的作業執行流程進行闡述 一、yarn的概述        Apache Yarn(Yet Another Resource Negotiator的縮寫)是hadoop叢集資源管理器系統,Yarn從hadoop 2引入,最初是為了

史上最簡單MySQL教程進階篇儲存引擎介紹及預設引擎設定

什麼是儲存引擎? 與其他資料庫例如Oracle 和SQL Server等資料庫中只有一種儲存引擎不同的是,MySQL有一個被稱為“Pluggable Storage Engine Architecture”(可替換儲存引擎架構)的特性,也就意味著My

PCA 主成分分析 寫給初學者 結合matlab轉載

整數 變量 行為 保持 sum osc 入參 函數 data 一、簡介 PCA(Principal Components Analysis)即主成分分析,是圖像處理中經常用到的降維方法,大家知道,我們在處理有關數字圖像處理方面的問題時,比如經常用的圖像的查詢

realloc 使用分析realloc invalid pointer、指針無效等錯誤【轉】

strong 開源 堆區 找到 失敗 temp idt googl 發生 來源:http://www.cnblogs.com/ladd/archive/2012/06/30/2571420.htmlrealloc函數用來為ptr重新分配大小為size的一塊內存,看似很簡單,

Linux基本常用命令ls含date,cal

Linux基礎【1】顯示日期的指令:date示例:(1)#date +%Y/%m/%d結果:2018/02/27(2)#date +%H:%M結果:10:48【2】顯示日歷的指令:cal格式:cal [month] [year]示例:(1)#cal 2 2018(2)#cal 13 2018結果:cal:il

大數據入門第十七天——storm上遊數據源 kafka入門

不同 這也 接受 blog 存儲 發送 records ant post 一、概述   1.kafka是什麽     根據標題可以有個概念:kafka是storm的上遊數據源之一,也是一對經典的組合,就像郭德綱和於謙     根據官網:http://kafka.apa

高效性MySQL集群

二進制日誌 網絡 keepal font 集群 二進制 數據讀寫 腦裂 sun 一.常見的高可用MySQL解決方案: 1.常見的高可用MySQL解決方案: 數據庫作為最基礎的數據存儲服務之一,在存儲系統中有著非常重要的地址,因此要求其具備高可用性無可厚非。能實現不同SL

高性能MySQL集群

主服務器 過濾 一主多從 orm failover 線程 alived 除了 設計思路 一.通過Keepalived搭建MySQL雙主模式的高可用集群系統 1.MySQL Replication介紹: MySQL Replication是MySQL自身提供的一個主從

JVMJMM卷一

1 序言:    在講解Java的記憶體模型之前,我們可以看看物理機在遇到併發問題時所想出的處理方案(物理機和Java虛擬機器在解決併發問題有不少相似的地方,具有很大的參考價值)。本章旨在剖析Java的記憶體模型以及讓讀者明白Java併發程式設計裡不知其所以然的地方。(推薦

mysql分表mysql自帶

#mysql分表詳解# 1. 分表 首先要知道什麼情況下,才需要分表個人覺得單表記錄條數達到百萬到千萬級別時就要使用分表了,分表的目的就在於此,減小資料庫的負擔,縮短查詢時間。 2. 分表方式 水平分割 表很大,其中表的某一行為列舉類,則可以使用水平切割。

docker容器技術Dockerfile

上一篇文章的連線:docker容器技術之儲存卷(五) 目錄 一、前言 二、Dockerfile 2.1製作映象有兩種: 2.2 什麼是Dockerfile? 2.3 Dockerfile的語法格式 dockerfile做映象時的工作邏輯: .dockering

PHPTrait多繼承

本文參考:  http://php.net/language.oop5.traits  一、什麼是trait     從PHP 5.4.0 開始 PHP 實現了一種新的程式碼複用方式 trait。 二、trait解決了什麼問題 &nb

梳理Python 框架中介軟體用途和機制

什麼是中介軟體? 中介軟體是一個Python程式設計師用來處理Django的請求和響應的框架級別的鉤子,它是一個輕量,低級別的外掛系統,用於全域性範圍內改變Django的輸入,輸出。每個中介軟體元件都負責做一些特定的功能。 說的直白一點是中介軟體就是幫我們程式設計

elasticsearch 索引儲存深入Elasticsearch教程03|MVP講堂

作者:阿里雲MVP 銘毅 往期內容:死磕 Elasticsearch 方法論:普通程式設計師高效精進的 10 大狠招!Elasticsearch學習,請先看這一篇!(Elasticsearch教程01)Elasticsearch增、刪、改、查操作深入詳解(Elasticsearch教程02) 1、關於ES

MySQL中鎖行鎖、表鎖、頁鎖、悲觀鎖、樂觀鎖等

原文地址:http://blog.csdn.net/mysteryhaohao/article/details/51669741 鎖,在現實生活中是為我們想要隱藏於外界所使用的一種工具。在計算機中,是協調多個程序或執行緒併發訪問某一資源的一種機制。在資料庫當中,除了傳統

MYSQL資料庫知識1

目錄 基本DDL語句—建表語句CREATE TABLE 基本DML語句-INSERT/UPDATE/DELECT 基本DQL語句-SELECT DDL語句—建表語句CREATE TABLE 1、資料庫 檢視所有資料庫 show databases;

C++模板

C++模板   模板是C++支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數、返回值取得任意型別。   模板是一種對型別進行引數化的工具;   通常有兩種形式:函式模板和類模板;   函式模板針對僅引數型別不同的函式;   類模板針對僅資料成