1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      mysql索引基數(shù)概念與用法示例

      本文實例講述了MySQL索引基數(shù)概念與用法。分享給大家供大家參考,具體如下:

      創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端網(wǎng)站建設(shè)公司成都網(wǎng)站制作公司成都網(wǎng)站設(shè)計公司、網(wǎng)站定制、成都全網(wǎng)營銷微信平臺小程序開發(fā)、微信公眾號開發(fā)、網(wǎng)站推廣服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計、程序開發(fā)來完成項目落地,為成都茶藝設(shè)計企業(yè)提供源源不斷的流量和訂單咨詢。

      Cardinality(索引基數(shù))是mysql索引很重要的一個概念

      索引基數(shù)是數(shù)據(jù)列所包含的不同值的數(shù)量。例如,某個數(shù)據(jù)列包含值1、2、3、4、5、1,那么它的基數(shù)就是5。索引的基數(shù)相對于數(shù)據(jù)表行數(shù)較高(也就是說,列中包含很多不同的值,重復(fù)的值很少)的時候,它的工作效果最好。如果某數(shù)據(jù)列含有很多不同的年齡,索引會很快地分辨數(shù)據(jù)行。如果某個數(shù)據(jù)列用于記錄性別(只有”M”和”F”兩種值),那么索引的用處就不大。如果值出現(xiàn)的幾率幾乎相等,那么無論搜索哪個值都可能得到一半的數(shù)據(jù)行。在這些情況下,最好根本不要使用索引,因為查詢優(yōu)化器發(fā)現(xiàn)某個值出現(xiàn)在表的數(shù)據(jù)行中的百分比很高的時候,它一般會忽略索引,進(jìn)行全表掃描。慣用的百分比界線是”30%”

      另一個概念叫做索引選擇性

      索引選擇性=索引基數(shù)/數(shù)據(jù)總數(shù),基數(shù)可以通過“show index from 表名”查看。
      越接近1就越有可能利用索引,也可以理解1為百分百
      高索引選擇性的好處就是mysql查找匹配的時候可以過濾更多的行,唯一索引的選擇性最佳,值為1。

      這里是我自己的一張表,數(shù)據(jù)量并不高,只是為了測驗索引選擇性

      select * from articles
      id 標(biāo)題 姓名
      15 Title 0 大熊
      16 Title 1 大熊
      17 Title 2 大熊
      18 Title 3 大熊
      19 Title 4 大熊
      20 Title 5 大熊
      21 Title 6 大熊
      22 Title 7 大熊
      23 Title 8 二熊
      24 Title 9 二熊
      
      

      id為默認(rèn)整型自增主鍵

      現(xiàn)在增加author列為索引并查看articles表的所有索引

      ALTER TABLE `articles` ADD INDEX (`author`)
      SHOW INDEX FROM articles
      table non_unique key_name seq_in_index column_name collation cardinality sub_part packed null index_type
      articles 0 PRIMARY 1 id A 10 NULL NULL  BTREE
      articles 1 author 1 author A 2 NULL NULL  BTREE
      
      

      說下各個字段的意義

      • table表名
      • non_unique如果索引不能包括重復(fù)詞,則為0。如果可以,則為1。
      • key_name索引名
      • seq_in_index索引中的列序列號,從1開始
      • column_name列名
      • collation列以什么方式存儲在索引中。在MySQLSHOW INDEX語法中,有值'A'(升序)或NULL(無分類)
      • cardinality索引基數(shù)
      • sub_part如果列只是被部分地編入索引,則為被編入索引的字符的數(shù)目。如果整列被編入索引,則為NULL。
      • packed指示關(guān)鍵字如何被壓縮。如果沒有被壓縮,則為NULL。
      • null如果列含有NULL,則含有YES。如果沒有,則該列含有NO。
      • index_type所用索引存儲方法(BTREE, FULLTEXT, HASH, RTREE)

      可以看到,表articles已經(jīng)有兩個索引了

      id索引不包含重復(fù)詞 為主鍵 列名id 升序排列 索引基數(shù)為10 沒有部分索引 沒有壓縮 不含null 存儲方式為btree

      author索引包含重復(fù)詞 索引名author 列名author 升序排列 索引基數(shù)為2 沒有部分索引 沒有壓縮 不含null 存儲方式為btree

      根據(jù)索引選擇性的算法,id索引選擇性為10/10 =1 author索引選擇性為2/10=0.2, 下面咱們測試一下,使用explain看一下語句分析

      explain select * from articles where id = 15
      id select_type table partitions type possible_keys key key_len ref rows filtered extra
      1 SIMPLE articles NULL const PRIMARY PRIMARY 4 const 1 100.00 NULL
      
      

      這邊再說一下explain這個命令

      explain顯示了mysql如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優(yōu)化的查詢語句。說一下每個字段的意義

      1.idSELECT識別符。這是SELECT查詢序列號。這個不重要,查詢序號即為sql語句執(zhí)行的順序

      2.select_typeselect類型

      2.1.SIMPLE進(jìn)行不需要Union操作或不含子查詢的簡單select查詢時,響應(yīng)查詢語句的select_type 即為simple,無論查詢語句是多么復(fù)雜,執(zhí)行計劃中select_type為simple的單位查詢一定只有一個
      2.2.PRIMARY一個需要Union操作或含子查詢的select查詢執(zhí)行計劃中,位于最外層的select_type即為primary。與simple一樣,select_type為primary的單位select查詢也只存在1個
      2.3.union由union操作聯(lián)合而成的單位select查詢中,除第一個外,第二個以后的所有單位select查詢的select_type都為union。union的第一個單位select的select_type不是union,而是DERIVED。它是一個臨時表,用于存儲聯(lián)合(Union)后的查詢結(jié)果
      2.4.DEPENDENT UNION dependent與UNION select_type一樣,dependent union出現(xiàn)在union或union all 形成的集合查詢中。此處的dependent表示union或union all聯(lián)合而成的單位查詢受外部影響
      2.5.union result union result為包含union結(jié)果的數(shù)據(jù)表

      3.table表名

      4.type連接類型,有多個參數(shù),先從最佳類型到最差類型介紹 也是本篇的重點

      4.1 const,表最多有一個匹配行,const用于比較primary key 或者unique索引。因為只匹配一行數(shù)據(jù),所以很快,也可以理解為最優(yōu)化的索引,常數(shù)查找
      4.2 eq_ref對于eq_ref的解釋,mysql手冊是這樣說的:”對于每個來自于前面的表的行組合,從該表中讀取一行。除了const類型,這可能是最好的聯(lián)接類型”
      4.3 ref對于每個來自于前面的表的行組合,所有有匹配索引值的行將從這張表中讀取。如果聯(lián)接只使用鍵的最左邊的前綴,或如果鍵不是UNIQUE或PRIMARY KEY(換句話說,如果聯(lián)接不能基于關(guān)鍵字選擇單個行的話),則使用ref。如果使用的鍵僅僅匹配少量行,該聯(lián)接類型是不錯的
      4.4 ref_or_null該聯(lián)接類型如同ref,但是添加了MySQL可以專門搜索包含NULL值的行。在解決子查詢中經(jīng)常使用該聯(lián)接類型的優(yōu)化
      4.5 index_merge該聯(lián)接類型表示使用了索引合并優(yōu)化方法。在這種情況下,key列包含了使用的索引的清單,key_len包含了使用的索引的最長的關(guān)鍵元素
      4.6 unique_subquery
      4.7 index_subquery
      4.8 range給定范圍內(nèi)的檢索,使用一個索引來檢查行
      4.9 index該聯(lián)接類型與ALL相同,除了只有索引樹被掃描。這通常比ALL快,因為索引文件通常比數(shù)據(jù)文件小。(也就是說雖然all和Index都是讀全表,但index是從索引中讀取的,而all是從硬盤中讀的)
      4.10 ALL對于每個來自于先前的表的行組合,進(jìn)行完整的表掃描。如果表是第一個沒標(biāo)記const的表,這通常不好,并且通常在它情況下很差。通常可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常數(shù)值或列值被檢索出

      5.possible_keys提示使用哪個索引會在該表中找到行,不太重要

      6.keys指明MYSQL查詢使用的索引

      7.key_lenMYSQL使用的索引長度

      8.ref顯示使用哪個列或常數(shù)與key一起從表中選擇行

      9.rows顯示MYSQL執(zhí)行查詢的行數(shù),數(shù)值越大越不好,說明沒有用好索引

      10.Extra該列包含MySQL解決查詢的詳細(xì)信息

      可以看到 id查詢 使用了id索引 簡單查詢 查詢類型為最優(yōu)的常量查詢
      然后咱們換一個查詢試試,這次使用作者索引

      explain select * from articles where author = "大熊"
      1 SIMPLE articles NULL ALL author NULL NULL NULL 10 80.00 Using where
      
      

      可以很清楚的看到 使用了author索引 簡單查詢 查詢類型為最差的全表掃描
      先不急著解釋,還是這個語句,咱們換成二熊

      explain select * from articles where author = "二熊"
      1 SIMPLE articles NULL ref author author 1022 const 2 100.00 NULL
      
      

      可以看到這次的查詢類型為ref

      也就是說,因為作者為大熊的數(shù)據(jù)行數(shù),超過了總數(shù)據(jù)的百分之30 所以mysql認(rèn)為全表掃描比使用索引更快
      這就是索引基數(shù)和索引選擇性這個概念的意義,所以在建立索引的時候,要注意要把索引建立在索引基數(shù)高的列上

      更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL索引操作技巧匯總》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》

      希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。


      網(wǎng)站標(biāo)題:mysql索引基數(shù)概念與用法示例
      網(wǎng)站鏈接:http://ef60e0e.cn/article/ppgdsp.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        乐山市| 屯门区| 金华市| 金坛市| 内黄县| 买车| 乡城县| 平远县| 德化县| 安图县| 大姚县| 定结县| 城步| 和龙市| 什邡市| 高台县| 石柱| 闻喜县| 哈密市| 长岭县| 法库县| 绥滨县| 沂南县| 台南市| 阳信县| 荃湾区| 克拉玛依市| 鱼台县| 庆阳市| 合山市| 米林县| 侯马市| 伊春市| 鸡泽县| 榆林市| 乌恰县| 长顺县| 巫溪县| 南部县| 雷州市| 从江县|