日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql 分组占比_含泪整理MySQL索引

發(fā)布時(shí)間:2025/4/16 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 分组占比_含泪整理MySQL索引 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

索引優(yōu)化分析

  • 性能下降SQL慢

    • 查詢(xún)語(yǔ)句寫(xiě)的差

    • 索引失效

      • 單值索引

      • 多值索引

    • 關(guān)聯(lián)查詢(xún)太多join(設(shè)計(jì)缺陷或不得已的需求)

    • 服務(wù)器調(diào)優(yōu)以及各個(gè)參數(shù)設(shè)置(緩沖、線(xiàn)程數(shù)等)

  • 執(zhí)行時(shí)間長(zhǎng)

  • 等待時(shí)間長(zhǎng)

  • 常見(jiàn)通用的JOIN查詢(xún)

    • 共有的INNER JOIN

    • 左表的共有 LEFT JOIN

    • 右表的共有 RIGHT JOIN

    • 左邊獨(dú)有 where b.key is null

    • 全鏈接 full outer join

    • ab都沒(méi)用a.key is null or b.key is null

索引簡(jiǎn)介

  • 是什么

    • 排好序。

    • 查詢(xún)快。

    • 數(shù)據(jù)庫(kù)系統(tǒng)還維護(hù)著滿(mǎn)足特定查找算法的數(shù)據(jù)結(jié)構(gòu)。B+TREE索引(此處不展開(kāi)討論)

    • 索引:是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),可以得到索引的本質(zhì)。索引是一種數(shù)據(jù)結(jié)構(gòu)。

    • 高效查詢(xún),類(lèi)似新華字段。

    • 排好序的快速查找數(shù)據(jù)結(jié)構(gòu)。(order by …)

  • 優(yōu)勢(shì)

    • 提高索引的檢索效率,降低數(shù)據(jù)庫(kù)的IO成本。

    • 通過(guò)數(shù)據(jù)進(jìn)行排序,降低數(shù)據(jù)的排序成包,降低了cpu的消耗。

  • 劣勢(shì)

    • 實(shí)際上索引也是一張表,該表保存了主鍵索引字段,并指向?qū)嶓w表的數(shù)據(jù),占空間。

    • 索引提高了查詢(xún),但是降低了更新。

    • 提高效率的一個(gè)因素,如果有大數(shù)據(jù)量的表,花時(shí)間建立最優(yōu)秀的索引,或者優(yōu)化查詢(xún)。

  • MySQL索引分類(lèi)

    • 單值索引

      • 一個(gè)索引只包含單個(gè)列,一個(gè)表可以有多個(gè)單列索引。

    • 唯一索引

      • 索引列的值必須唯一,但允許有空值。

    • 復(fù)合索引

      • 一個(gè)索引包含索格列

    • 基本語(yǔ)法

    • 哪些需要?jiǎng)?chuàng)建索引

      • 主鍵索引

      • 頻繁查詢(xún)

      • 外鍵管理

      • 組合索引

      • 排序字段

      • 統(tǒng)計(jì)或分組

    • 哪些情況不需要?jiǎng)?chuàng)建索引

      • 表記錄少

      • 300百萬(wàn)就差不多開(kāi)始優(yōu)化

      • 經(jīng)常增刪改的不創(chuàng)建索引

      • 重復(fù)的值

  • MySQL索引結(jié)構(gòu)

    • BTree索引

    • Hash索引

    • full-text全文索引

    • R-TREE索引

性能分析

一、MySQL常見(jiàn)的性能瓶頸
  • cpu飽和

  • io內(nèi)存

  • 硬件瓶頸,top,free,iostat,vmstat

  • 是什么

    • 模擬優(yōu)化器執(zhí)行的SQL查詢(xún)語(yǔ)句,從而知道MySQL是如何處理SQL語(yǔ)句的,分析查詢(xún)語(yǔ)句或者表結(jié)構(gòu)。

  • 能干什么

    • Explain + sql

    • 表的讀取順序

    • 數(shù)據(jù)讀取操作的操作類(lèi)型

    • 哪些索引可以被使用

    • 哪些哪些索引實(shí)際被使用

    • 表之間的引用

    • 每張表有多少行被優(yōu)化器查詢(xún)

二、Explain每個(gè)字段的詳細(xì)描述
  • id

    • 數(shù)字大的優(yōu)先級(jí)高。(derived衍生)

    • id不同,如果是子查詢(xún),id的需要會(huì)遞增,id值越大優(yōu)先級(jí)越高,先被執(zhí)行。

    • id相同,執(zhí)行順序從上往下

    • id相同與不同,同時(shí)存在。

  • select_type

    • 有哪些?

      • simple

        • 簡(jiǎn)單的select查詢(xún),查詢(xún)中不包含子查詢(xún)或者union

      • primary

        • 查詢(xún)中若包含任何復(fù)雜的子部分,最外層查詢(xún)則被標(biāo)記為primary

      • subquery

        • 在select 或者where 列表中包含了子查詢(xún)

      • derived(衍生)

        • 在from列表中包含的子查詢(xún)被標(biāo)記為derived,MySQL會(huì)遞歸執(zhí)行這些子查詢(xún),把結(jié)果放在臨時(shí)表里。

      • union

        • 若第二個(gè)select出現(xiàn)在union之后,則被標(biāo)記為union。若union包含在from子句的子查詢(xún)中,外層select被標(biāo)記為derived.

      • union result

        • 兩個(gè)union查詢(xún)的結(jié)果。

    • 查詢(xún)的類(lèi)型,主要是用于區(qū)別普通查詢(xún),聯(lián)合查詢(xún),子查詢(xún)等復(fù)雜查詢(xún)

  • type

    • 類(lèi)型有:all,index,arnge,ref,eq_ref,const,system,null

  • system

    • 表只有一行記錄,平時(shí)不會(huì)出現(xiàn),忽略不計(jì)

  • const

    • 一次索引,用于比較primary 或者union 索引。因?yàn)橹黄ヅ湟恍杏涗洝@鐚⒅麈I置于where列表,MySQL就能將該查詢(xún)轉(zhuǎn)換成一個(gè)常量

  • eq_ref

    • 唯一性索引掃描,對(duì)于每個(gè)索引鍵,表中只有一條記錄與之匹配。常見(jiàn)于主鍵或者唯一索引

  • ref

    • 非唯一性索引掃描,返回匹配某個(gè)單獨(dú)的所有行。本質(zhì)上也是一種索引訪問(wèn),它返回所有匹配某個(gè)單獨(dú)值的行。可能會(huì)找到多個(gè)符合條件的行,所以屬于查找和掃描的混合體。

  • range

    • 只檢索給定范圍的行,使用一個(gè)索引來(lái)選擇行。key列顯示使用了哪個(gè)索引。一般就算在where語(yǔ)句中出現(xiàn)的between,<>,in,等的查詢(xún)。這種范圍掃描比全表掃描要好,因?yàn)樗恍枰_(kāi)始結(jié)束于索引的兩個(gè)點(diǎn),不用全表索引。

  • index

    • index與all區(qū)別為Index只遍歷索引樹(shù)。

  • all

    • 全表掃描

  • possible_keys

    • 可能用到的索引。一個(gè),多個(gè)。

    • 不一定被實(shí)際查詢(xún)引用。

  • key

    • 實(shí)際使用到的索引。

    • 查詢(xún)中若使用到了全文索引

    • 覆蓋索引:查詢(xún)的字段和索引字段一一對(duì)應(yīng)。(查詢(xún)列要被所建的索引覆蓋)

  • key_len

    • 索引使用的字節(jié)數(shù)。索引字段的最大可能的長(zhǎng)度,不是實(shí)際。(越小越好)

  • ref

    • 顯示索引的那一列被使用。最好是常量

  • rows

    • 大致讀到的行數(shù)。

  • Extra

    • 在沒(méi)用group by 子句的情況下,基于索引優(yōu)化min/max操作或者對(duì)用MyIAAM存儲(chǔ)引擎優(yōu)化count()操作,不必等到執(zhí)行階段再進(jìn)行計(jì)算。查詢(xún)執(zhí)行計(jì)劃生成階段即完成優(yōu)化。

    • 表示使用了覆蓋索引,避免了訪問(wèn)表的數(shù)據(jù)行。如果同時(shí)出現(xiàn)了using where,表明索引被用來(lái)執(zhí)行索引鍵值的查找。如果沒(méi)用同時(shí)現(xiàn)象using where ,表明縮影用來(lái)讀取數(shù)據(jù)而非執(zhí)行查詢(xún)動(dòng)作。

    • 新建了內(nèi)部的臨時(shí)表,常見(jiàn)于order by 和分組查詢(xún)group by

    • mysql會(huì)對(duì)數(shù)據(jù)使用一個(gè)外部的索引排序,而不是按照表內(nèi)的索引順序進(jìn)行讀取。mysql中無(wú)法利用索引完成的排序操作稱(chēng)為文件排序。(排序未命中索引)

    • using firesort

    • sql+\G

    • using temporary

    • using index(還可以哦)

    • using where

    • using join buffer:使用了連接緩存

    • impossible where:不能獲取到任何元素

    • select tables optimized away

    • distinct:找到第一個(gè)匹配的元組后就收工。

  • 從最好到最差system>const>eq_ref>ref>i>range>index>all

  • 一般來(lái)說(shuō),保證查詢(xún)至少達(dá)到range級(jí)別,最好能達(dá)到ref

性能分析

一、索引分析

  • 單表索引

  • 兩張表

    • 左鏈接加到右表

    • 右鏈接加到左表

  • 三張表

    • 加到后面兩張表

  • 結(jié)論

    • 小結(jié)果集驅(qū)動(dòng)大結(jié)果集

    • 優(yōu)先優(yōu)化內(nèi)部循環(huán)

    • join buffer的設(shè)置

二、避免索引失效

  • 全值索引最好

  • 最左匹配法則

  • 不在索引列上做任何操作(計(jì)算,函數(shù),類(lèi)型轉(zhuǎn)換,會(huì)導(dǎo)致索引失效而轉(zhuǎn)向全表掃描)

  • 存儲(chǔ)引擎不能使用索引范圍條件右邊的列(范圍之后全失效)

  • 盡量使用覆蓋索引。不要select *

  • mysql在使用不等于(!=或者<>)的時(shí)候無(wú)法使用索引導(dǎo)致全表掃描

  • is null,is not null也無(wú)法使用索引(索引失效)(%加右邊)

    • 解決辦法:覆蓋索引。

  • like 以通配符開(kāi)通(%aaa)索引也會(huì)失效,變成全表掃描

  • 字符串不加單引號(hào)索引失效

  • 少用or,用它來(lái)連接時(shí)會(huì)索引失效

我是失憶,一個(gè)熱愛(ài)技術(shù)的宅男,文章有任何問(wèn)題您都可以在留言中指出。歡迎留言。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的mysql 分组占比_含泪整理MySQL索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。