30期mysql索引掌握btree數(shù)據(jù)結(jié)構(gòu)特征葉子節(jié)點非存儲內(nèi)容_第1頁
30期mysql索引掌握btree數(shù)據(jù)結(jié)構(gòu)特征葉子節(jié)點非存儲內(nèi)容_第2頁
30期mysql索引掌握btree數(shù)據(jù)結(jié)構(gòu)特征葉子節(jié)點非存儲內(nèi)容_第3頁
30期mysql索引掌握btree數(shù)據(jù)結(jié)構(gòu)特征葉子節(jié)點非存儲內(nèi)容_第4頁
30期mysql索引掌握btree數(shù)據(jù)結(jié)構(gòu)特征葉子節(jié)點非存儲內(nèi)容_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Mysql索引用指針指向存儲在表中指定列的數(shù)據(jù)值,然后根據(jù)指定的次序排列這些指針,有助于引。索引將占用磁盤空間,并且影響數(shù)據(jù)更新的速度。但是在多數(shù)情況下,索引所帶來的在MySQLB-Tree索引(B+Tree,Hash索引,F(xiàn)ulltext索引和R-Tree索引。CREATEINDEX使用,不過目前只有CHAR、VARCHAR,TEXT全文索引并不是和MyISAM一起誕生的,它的出現(xiàn)是為了解決WHEREnameLIKE由于HASH的唯一(幾乎100%的唯一)及類似鍵值對的形式,很適合作為索引。BTREE索引就是一種將索引值按一定的算法,存入一個樹形的數(shù)據(jù)結(jié)構(gòu)中(二叉樹每次查詢都是從樹的入口root開始,依次遍歷node,獲取leaf。這是MySQL里默認和最RTREE在MySQL很少使用,僅支持geometry數(shù)據(jù)類型,支持該類型的存儲引擎只有MyISAM、BDb、InnoDb、NDb、Archive幾種。fulltext:FULLTEXT用在比較短的文本,如果就一兩行字的,普通的INDEX也可以。mB+Tree1mm(B-Treem-序的鏈表,方便遍歷B+樹。MyISAMB+Treedata下圖是MyISAM主鍵索引的原理圖:Col1myisam1MyISAM引(Primarykey)示意。可以看出MyISAM的索引文件僅僅保存數(shù)據(jù)記錄的地址。引要求key是唯一的,而輔助索引的key可以重復(fù)。如果我們在Col2上建立一個輔助B+TreeKeydata然后以data域的值為地址,讀取相應(yīng)數(shù)據(jù)記錄。inndb)InnoDB(同時也是數(shù)據(jù)文件)的示意圖,可以看到葉節(jié)點包含了完整的數(shù)據(jù)記錄。這種索引叫做聚集索引。因為InnoDB的數(shù)據(jù)文件本身定,則MySQL系統(tǒng)會自動選擇一個可以唯一標識數(shù)據(jù)記錄的列作為主鍵,如果不存在InnoDB的所有輔助索引都引用主鍵作為data域。例如,下圖為定義在Col3上的一個InnoDB表是基于聚簇索引建立的。因此InnoDB的索引能提供一種非??焖俚闹麈I查找性能。不過,它的輔助索引(SecondaryIndex,也就是非主鍵索引)也會包含主鍵列,所以,如果主鍵定義的比較大,其他索引也將很大。如果想在表上定義、很多索引,則爭取盡量把主鍵定義得小一些。InnoDB不會壓縮索引。不同存儲引擎的索引實現(xiàn)方式對于正確使用和優(yōu)化索引都非常有幫助,例如知道了InnoDB的索引實現(xiàn)后,就很容易明白為什么不建議使用過長的字段作為主鍵,因為所有輔InnoDBInnoDBB+Tree,非單調(diào)的主鍵B+Tree一是主索引的區(qū)別,InnoDBMyISAM二是輔助索引的區(qū)別:InnoDB的輔助索引data域存儲相應(yīng)記錄主鍵的值而不是地址。而MyISAM的輔助索引和主索引沒有多大區(qū)別。1showstatus命令了解各種sqlexplain使用說明操作,降低內(nèi)存與CPU資源的消耗。例如下面SQL語句不能使用索引。select*fromdocwheretitlelike'%XX'而非前導(dǎo)模糊查詢則可以使用索引,如下面的SQL語句。select*fromdocwheretitlelike'XX%'union、in、or都能夠命中索引,建議使用inselect*fromdocwherestatus=1unionallselect*fromdocwhere直接告訴MySQL怎么做,MySQL耗費的CPU最少,但是一般不這么寫SQL。select*fromdocwherestatusin(1,查詢優(yōu)化耗費的CPU比unionall多,但可以忽略不計,一般情況下建議使用inor:新版的MySQL能夠命中索引。select*fromdocwherestatus=1orstatus=查詢優(yōu)化耗費的CPU比in多,不建議頻繁用or負向條件查詢不能使用索引,可以優(yōu)化為in查詢。負向條件有:!=、<>、notin、notexists、notlike等。select*fromdocwherestatus1andstatus2可以優(yōu)化為in查詢:select*fromdocwherestatusin聯(lián)合索引最左前綴原則(又叫最左側(cè)查詢?nèi)绻?a,b,c)三個字段上建立聯(lián)合索引,那么它能夠加快a|(a,b)|(a,b,c)三組查詢速 Select*fromtablewhereb=””(不走索引)如果phone字段是varchar類型,則下面的SQL不能命中索引。select*fromuserwherephone以優(yōu)化為:select*fromuserwhere范圍列可以用到索引(聯(lián)合索引必須是最左前綴mysqlsql引速度要快則不走索引。假如有聯(lián)合索引(empno、title、fromdate),那么下面的SQL中emp_no引,而title和from_dateselect*fromemployees.titleswhereemp_no<10010'andtitle='SeniorEngineer'andfrom_datebetween'1986-01-01'and'1986-12-31'應(yīng)盡量避免在where子句中對字段進行null值判斷,否則將導(dǎo)致引擎放棄使用應(yīng)盡量避免在whereselectidfromtwhereselectidfromtwhereGROUPBYselectsexfromemployeewheredep=123 groupbysexhavingage>10;1、groupby實質(zhì)是先排序后分組,遵照索引的最佳左前綴。2、wherehavingwherehaving列有大量數(shù)據(jù)重復(fù)時,SQLsex,male、female幾乎各一半,那么即使在sex上建了索引也對查詢效率起不了作用。UnionunionallUnionAll,對兩個結(jié)果集進行并集操作,包括重復(fù)行,不進行排序;包含重復(fù)的數(shù)據(jù)的話,那么就使用UNIONALL。mysqlforceindex(select*fromtableforceindex(ziduan1_indexlimit2;(強制使用索引select*fromtableignoreindex(ziduan1_index)limit21.請問如下三條SQLwherea=1andb=1whereb=1whereb=1orderbytimeidxab(a,b)和idxbtime(b,time第二問:MySQLwhereSQL,idxba(b,a)wheremysql>mysql> SELECT*FROMWHERESTATUS=1limit++ |id|select_type| |partitions|type|+||key_len| +| |filtered|Extra++++++++++ 1| |tb_news_online| | |idx_tb_news_online_9 |const|99494+++++100| ++++++、range、indexhe和ALL的域從WHERE語句中選擇一個合適的語句keyNULL,則沒有使用索引。很少的情

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論