最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡介

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

通過Explain,我們可以分析出以下結(jié)果:

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

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

explain select * from user;

它的結(jié)果主要包含以下字段

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列表中包含的子查詢被標(biāo)記為DERIVED(衍生),MySQL會遞歸執(zhí)行這些子查詢,把結(jié)果放在臨時表中
  • UNION:若第二個SELECT出現(xiàn)在索引之后,則被標(biāo)記為UNION:若索引包含在FROM子句的子查詢中,外層SELECT將被標(biāo)記為:DERIVED
  • UNION RESULT:從索引表獲取結(jié)果的查詢

table查詢涉及的表或衍生表

type查詢類型

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

system:表只有一條數(shù)據(jù)

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

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

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

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

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

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

type 類型的性能比較

通常來說, 不同的 type 類型的性能關(guān)系如下:

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

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

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

key 查詢使用的索引

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

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

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

rows MySQL估算要查找到結(jié)果集需要掃描讀取的數(shù)據(jù)行數(shù)

Extra額外的信息

常見的有以下幾種內(nèi)容:

  • Using filesort:MySQL 需額外的排序操作, 不能通過索引順序達到排序效果. 一般有 Using filesort, 都建議優(yōu)化去掉, 因為這樣的查詢 CPU 資源消耗大.
  • Using index:表示查詢在索引樹中就可查找所需數(shù)據(jù), 不用掃描表數(shù)據(jù)文件, 往往說明性能不錯
  • Using temporary:查詢有使用臨時表, 一般出現(xiàn)于排序, 分組和多表 join 的情況, 查詢效率不高, 建議優(yōu)化.
  • Using where:表明使用了where過濾
  • Using join buffer:表明使用了連接緩存,比如說在查詢的時候,多表join的次數(shù)非常多,那么將配置文件中的緩沖區(qū)的join buffer調(diào)大一些
  • 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操作,在找到第一匹配的元組后即停止找同樣值的動作

總結(jié)

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

相關(guān)文章

  • 簡單聊一聊SQL注入及防止SQL注入

    簡單聊一聊SQL注入及防止SQL注入

    眾所周知SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,它不是利用操作系統(tǒng)的BUG來實現(xiàn)攻擊,而是針對程序員編程時的疏忽,通過SQL語句,實現(xiàn)無帳號登錄,下面這篇文章主要給大家介紹了關(guān)于SQL注入及防止SQL注入的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 2024 Navicat Premium最新版簡體中文版激活永久圖文詳細(xì)教程(親測可用)

    2024 Navicat Premium最新版簡體中文版激活永久圖文詳細(xì)教程(親測可用)

    這篇文章主要介紹了2024 Navicat Premium最新版簡體中文版激活永久圖文詳細(xì)教程,文章通過圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-09-09
  • MySQL與Oracle 差異比較之七用戶權(quán)限

    MySQL與Oracle 差異比較之七用戶權(quán)限

    這篇文章主要介紹了MySQL與Oracle 差異比較之七用戶權(quán)限,需要的朋友可以參考下
    2017-04-04
  • 錯誤代碼:1100 Table ''t_depart_info'' was not locked with LOCK TABLES的解決方法

    錯誤代碼:1100 Table ''t_depart_info'' was not locked with LOCK T

    這篇文章就是告訴大家如何解決錯誤代碼:1100 Table 't_depart_info' was not locked with LOCK TABLES,遇到類似問題的朋友可以參考一下
    2015-10-10
  • hive中的幾種join到底有什么區(qū)別

    hive中的幾種join到底有什么區(qū)別

    hive處理表關(guān)聯(lián)時由于數(shù)據(jù)量以及數(shù)據(jù)傾斜等問題會導(dǎo)致計算性能差甚至任務(wù)失敗,下面這篇文章主要給大家介紹了關(guān)于hive中幾種join到底有什么區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 數(shù)據(jù)庫運維人員DBA工作總結(jié)

    數(shù)據(jù)庫運維人員DBA工作總結(jié)

    中大型公司都會有一些專攻數(shù)據(jù)庫方面的牛人,專門的職位叫做DBA,對于公司的DBA他們的價值不可小覷,只要是數(shù)據(jù)庫,就有吞吐量的限制,數(shù)據(jù)庫訪問瓶頸便是自然流量增長或者流量突增造成的
    2023-10-10
  • 數(shù)據(jù)庫中union 與union all 的區(qū)別

    數(shù)據(jù)庫中union 與union all 的區(qū)別

    當(dāng)我們要對兩個或兩個以上的表進行操作時。我們經(jīng)常會用到union 與union all
    2009-11-11
  • sql注入之手工注入示例詳解

    sql注入之手工注入示例詳解

    之前和大家分享了基本的SQL注入的知識,這一篇講的就是在得知注入點的之后,如何有效地進行脫褲。文章通過示例介紹的很詳細(xì),對大家的理解和學(xué)習(xí)很有幫助,下面來一起看看吧。
    2016-09-09
  • 將sqlite3中數(shù)據(jù)導(dǎo)入到mysql中的實戰(zhàn)教程

    將sqlite3中數(shù)據(jù)導(dǎo)入到mysql中的實戰(zhàn)教程

    最近因為工作的需求,需要將sqlite3中的數(shù)據(jù)導(dǎo)入到mysql中去,發(fā)現(xiàn)網(wǎng)上的一些教程都不夠詳細(xì),索性自己寫一篇,下面這篇文章主要給大家介紹了關(guān)于將sqlite3數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到mysql數(shù)據(jù)庫中的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • navicat怎么卸載,navicat徹底卸載干凈教程

    navicat怎么卸載,navicat徹底卸載干凈教程

    這篇文章主要介紹了navicat怎么卸載?navicat徹底卸載干凈教程。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論

溆浦县| 珠海市| 同江市| 兴城市| 康保县| 天长市| 梁平县| 柯坪县| 清河县| 依兰县| 锡林浩特市| 米林县| 惠州市| 长沙县| 巴林右旗| 林西县| 军事| 淄博市| 元氏县| 大竹县| 满洲里市| 安龙县| 梅河口市| 晋城| 师宗县| 保定市| 革吉县| 清水县| 中西区| 赞皇县| 从化市| 鞍山市| 慈利县| 宁乡县| 巴楚县| 佳木斯市| 承德市| 乌什县| 北票市| 利辛县| 广南县|