濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > MySQL查詢語句過程和EXPLAIN語句基本概念及其優(yōu)化

MySQL查詢語句過程和EXPLAIN語句基本概念及其優(yōu)化

熱門標(biāo)簽:電話機(jī)器人的價(jià)格多少錢一個(gè)月 自己做地圖標(biāo)注需要些什么 福建外呼電銷機(jī)器人加盟 中國地圖標(biāo)注公司 昌德訊外呼系統(tǒng) 徐涇鎮(zhèn)騰訊地圖標(biāo)注 天津公司外呼系統(tǒng)軟件 百度地圖標(biāo)注要什么軟件 400電話申請(qǐng)廠家現(xiàn)貨

網(wǎng)站或服務(wù)的性能關(guān)鍵點(diǎn)很大程度在于數(shù)據(jù)庫的設(shè)計(jì)(假設(shè)你選擇了合適的語言開發(fā)框架)以及如何查詢數(shù)據(jù)上。

我們知道MySQL的性能優(yōu)化方法,一般有建立索引、規(guī)避復(fù)雜聯(lián)合查詢、設(shè)置冗余字段、建立中間表、查詢緩存等,也知道用EXPLAIN來查看執(zhí)行計(jì)劃。

但對(duì)MySQL復(fù)雜查詢語句執(zhí)行過程和內(nèi)部機(jī)制,MySQL Optimizer本身所做優(yōu)化以及查詢語句調(diào)整對(duì)性能所產(chǎn)生的影響及其原因知之甚少。

本文試圖對(duì)其中的一些關(guān)鍵概念如執(zhí)行過程、索引使用等做比較深入的探討,知其然,知其所以然,

這樣可以避免在原本通過MySQL簡(jiǎn)單優(yōu)化就能獲得很好效果的情況下,盲目跟風(fēng)轉(zhuǎn)向NoSQL存儲(chǔ)或者投入資金升級(jí)基礎(chǔ)設(shè)施。

工欲善其事,必先利其器,這里首先介紹MySQL查詢語句性能分析工具。

MySQL的EXPLAIN命令是用來分析查詢性能的工具,EXPLAIN的輸出每一行對(duì)應(yīng)于查詢語句中的一張表的執(zhí)行計(jì)劃說明,其輸出列含義如下表:

上表中type列是表關(guān)聯(lián)類型,常見的有如下類型(按關(guān)聯(lián)查詢效率從高到低排列):

const(常量連接),比如SELECT * FROM user WHERE id=1;
eq_ref(等值引用),比如SELECT * FROM user,card WHERE user.id=card.userid;
ref(引用),用于非唯一索引,比如SELECT * FROM user,card WHERE user.last_name='test';
range(范圍),比如SELECT * FROM tbl_name WHERE key_column > 10;
index(索引),根據(jù)索引來讀取數(shù)據(jù),如果索引已包含了查詢數(shù)據(jù),只需掃描索引樹,否則執(zhí)行全表掃描和All類似;
ALL(所有),全表掃描

key列代表索引(index),rows表示估計(jì)會(huì)掃描多少行記錄,

Extra表示附加信息,常見的有如下幾種(也按查詢效率從高到低排列):

Using index:表示使用索引,如果同時(shí)出現(xiàn)Using where,代表使用索引來查找讀取記錄,如果沒有Using where,表示索引包含查詢數(shù)據(jù),無需額外的查找;
Using where:表示條件查詢,如果type列是ALL或index,而沒有出現(xiàn)該信息,則你有可能在執(zhí)行錯(cuò)誤的查詢:返回所有數(shù)據(jù);
Using filesort:不是“使用文件索引”的含義!filesort是MySQL所實(shí)現(xiàn)的一種排序策略,通常在使用到排序語句ORDER BY的時(shí)候,會(huì)出現(xiàn)該信息;
Using temporary:表示為了得到結(jié)果,使用了臨時(shí)表,這通常是出現(xiàn)在多表聯(lián)合查詢,結(jié)果排序的場(chǎng)合;

如果EXPLAIN出現(xiàn)后面兩個(gè)信息(Using filesort,Using temporary),而rows又比較大,通常意味著你需要調(diào)整查詢語句,或者需要添加索引,總之需要盡量消除這兩個(gè)信息。

下面給出EXPLAIN結(jié)果實(shí)例(從用戶檔案表中找出昵稱和性別,按用戶表中的用戶關(guān)注者數(shù)量排序):

上面的查詢語句就是典型的問題案例,Using filesort和Using temporary的具體含義以及如何優(yōu)化上述語句放在下一篇文章中結(jié)合查詢過程和原理來專門討論。

以上就是本篇文章的全部?jī)?nèi)容了,希望對(duì)各位有所幫助。如果大家還有其他方面的問題,可以留言交流,請(qǐng)持續(xù)關(guān)注腳本之家!

您可能感興趣的文章:
  • 淺談pymysql查詢語句中帶有in時(shí)傳遞參數(shù)的問題
  • MySQL模糊查詢語句整理集合
  • MySQL查詢語句簡(jiǎn)單操作示例
  • PHP使用mysqli同時(shí)執(zhí)行多條sql查詢語句的實(shí)例
  • mysql基礎(chǔ)架構(gòu)教程之查詢語句執(zhí)行的流程詳解
  • MySql帶OR關(guān)鍵字的多條件查詢語句
  • Mysql帶And關(guān)鍵字的多條件查詢語句
  • 詳解MySQL的limit用法和分頁查詢語句的性能分析
  • php mysqli查詢語句返回值類型實(shí)例分析
  • MySQL查詢語句大全集錦
  • 最全的mysql查詢語句整理
  • Oracle、MySQL和SqlServe三種數(shù)據(jù)庫分頁查詢語句的區(qū)別介紹
  • 詳解MySQL 查詢語句的執(zhí)行過程

標(biāo)簽:黔西 梅河口 鄂爾多斯 駐馬店 北京 陜西 荊門 昌都

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL查詢語句過程和EXPLAIN語句基本概念及其優(yōu)化》,本文關(guān)鍵詞  MySQL,查詢,語句,過程,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL查詢語句過程和EXPLAIN語句基本概念及其優(yōu)化》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL查詢語句過程和EXPLAIN語句基本概念及其優(yōu)化的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    綦江县| SHOW| 开封县| 洪雅县| 镇宁| 时尚| 万源市| 广河县| 增城市| 界首市| 台安县| 年辖:市辖区| 精河县| 苏州市| 达孜县| 海淀区| 和林格尔县| 嘉义县| 北京市| 陆丰市| 定西市| 高邮市| 日照市| 毕节市| 思南县| 陕西省| 富川| 民勤县| 甘洛县| 蒙阴县| 葵青区| 宝兴县| 金坛市| 兰坪| 湘潭市| 绥棱县| 灌阳县| 郎溪县| 太白县| 乌海市| 石台县|