亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

你真的知道怎么優(yōu)化SQL嗎

 更新時間:2019年06月02日 16:48:25   作者:Java學習錄  
這篇文章主要給大家介紹了關于優(yōu)化SQL的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

簡介

雖然使用Explain不能夠馬上調優(yōu)我們的SQL,它也不能給予我們一些調整建議,但是它能夠讓我們了解MySQL 優(yōu)化器是如何執(zhí)行SQL 語句的

通過Explain,我們可以分析出以下結果:

  • 表的讀取順序
  • 數據讀取操作的操作類型
  • 哪些索引可以使用
  • 哪些索引被實際使用
  • 表之間的引用
  • 每張表有多少行被優(yōu)化器查詢

Explain命令的用法十分簡單, 在 select語句前加上 Explain 就可以了, 例如:

explain select * from user;

它的結果主要包含以下字段

id、select_type、table、partitions、type、possible_keys、key、ref、rows、filtered、extra

接下來我們來看一下各個字段的含義

id 查詢序列號

加載表的順序

連接查詢各個表的加載順序是相同的,所以都為1

包含子查詢的時候,先執(zhí)行子查詢,所以user表的id值最大

select_type 查詢類型

常用取值有:

  • SIMPLE:簡單的select查詢,不包含子查詢和索引
  • PRIMARY:查詢中若包含任何子查詢,最外層查詢則為記為PRIMARY
  • SUBQUERY:在SELECT或WHERE列表中包含了子查詢
  • DERIVED:在FROM列表中包含的子查詢被標記為DERIVED(衍生),MySQL會遞歸執(zhí)行這些子查詢,把結果放在臨時表中
  • UNION:若第二個SELECT出現在索引之后,則被標記為UNION:若索引包含在FROM子句的子查詢中,外層SELECT將被標記為:DERIVED
  • UNION RESULT:從索引表獲取結果的查詢

table查詢涉及的表或衍生表

type查詢類型

通過 type 字段, 我們可以判斷此次查詢是全表掃描還是索引掃描等,type 常用的取值有:

system:表只有一條數據

const:針對主鍵或唯一索引的等值查詢掃描, 簡單理解為一次讀取就獲取到了數據,例如下面這個主鍵索引的查詢

eq_ref:唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵或唯一索引掃描

ref:非唯一性索引掃描,返回匹配某個單獨值的所有行

range:表示使用索引范圍查詢,例如=、<>、>、>=、<、<=、IS、 NULL、<=>、BETWEEN、IN等

index: 所要查詢的數據直接在索引樹中就可以獲取到, 而不需要掃描數據,例如:

ALL: 表示全表掃描, 這個類型的查詢是性能最差的查詢

type 類型的性能比較

通常來說, 不同的 type 類型的性能關系如下:

ALL < index < range < ref < eq_ref < const < system

possible_keys查詢時能夠使用到的索引.

possible_keys 表示 MySQL 在查詢時, 能夠使用到的索引. 注意并不是一定用,實際使用是由 由 key 字段決定

key 查詢使用的索引

此字段是 MySQL 在當前查詢時所真正使用到的索引.

key_len使用索引的字節(jié)數

這個字段可以評估組合索引是否完全被使用, 或只有最左部分字段被使用到.

rows MySQL估算要查找到結果集需要掃描讀取的數據行數

Extra額外的信息

常見的有以下幾種內容:

  • Using filesort:MySQL 需額外的排序操作, 不能通過索引順序達到排序效果. 一般有 Using filesort, 都建議優(yōu)化去掉, 因為這樣的查詢 CPU 資源消耗大.
  • Using index:表示查詢在索引樹中就可查找所需數據, 不用掃描表數據文件, 往往說明性能不錯
  • Using temporary:查詢有使用臨時表, 一般出現于排序, 分組和多表 join 的情況, 查詢效率不高, 建議優(yōu)化.
  • Using where:表明使用了where過濾
  • Using join buffer:表明使用了連接緩存,比如說在查詢的時候,多表join的次數非常多,那么將配置文件中的緩沖區(qū)的join buffer調大一些
  • impossible where:where子句的值總是false,不能用來獲取任何元組
  • select tables optimized away:在沒有GROUPBY子句的情況下,基于索引優(yōu)化MIN/MAX操作或者對于MyISAM存儲引擎優(yōu)化COUNT(*)操作,不必等到執(zhí)行階段再進行計算,查詢執(zhí)行計劃生成的階段即完成優(yōu)化
  • distinct:優(yōu)化distinct操作,在找到第一匹配的元組后即停止找同樣值的動作

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • 超大數據量存儲常用數據庫分表分庫算法總結

    超大數據量存儲常用數據庫分表分庫算法總結

    這篇文章主要介紹了超大數據量存儲常用數據庫分表分庫算法總結,本文講解了按自然時間來分表/分庫、按數字類型hash分表/分庫、按md5值來分表/分庫三種方法,以及分表所帶來的問題探討,需要的朋友可以參考下
    2015-07-07
  • db2數據庫常用操作命令大全

    db2數據庫常用操作命令大全

    這篇文章主要介紹了db2數據庫常用操作命令大全,匯總了DB2的常用操作命令,分享給大家供大家參考,需要的朋友可以參考下
    2014-09-09
  • 你應該知道的States字段使用規(guī)范

    你應該知道的States字段使用規(guī)范

    這篇文章主要給大家介紹了一些大家應該知道的States字段使用規(guī)范的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-12-12
  • 數據庫中刪除語句Drop、Delete、Truncate的相同點和不同點的比較(實例說明)

    數據庫中刪除語句Drop、Delete、Truncate的相同點和不同點的比較(實例說明)

    數據庫中刪除語句Drop、Delete、Truncate的相同點和不同點的比較,通過舉例說明讓大家了解
    2012-09-09
  • mybatis映射XML文件詳解及實例

    mybatis映射XML文件詳解及實例

    這篇文章主要介紹了mybatis映射XML文件詳解及實例的相關資料,需要的朋友可以參考下
    2017-03-03
  • JetBrains DataGrip安裝和使用的詳細教程

    JetBrains DataGrip安裝和使用的詳細教程

    日常開發(fā)中少不了各種可視化數據庫管理工具。本文介紹另一個十分好用且強大的工具:DataGrip。具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • 隱式轉換引起的sql慢查詢實戰(zhàn)記錄

    隱式轉換引起的sql慢查詢實戰(zhàn)記錄

    大家知道數據庫為了提高查詢速度,增加索引是必不可少的,但是有些時候即使你加了索引也不定有效果,這篇文章主要給大家介紹了一次因為隱式轉換引起的sql慢查詢的相關資料,需要的朋友可以參考下。
    2018-04-04
  • Hive常用日期格式轉換語法

    Hive常用日期格式轉換語法

    這篇文章主要為大家介紹了Hive常用日期格式轉換語法的操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Hive日期格式轉換方法總結

    Hive日期格式轉換方法總結

    這篇文章主要為大家介紹了Hive日期格式轉換方法總結,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Sql Server下數據庫鏈接的使用方法

    Sql Server下數據庫鏈接的使用方法

    Sql Server下數據庫鏈接的使用方法...
    2006-12-12

最新評論