mysql查看是否使用索引 mysql默認(rèn)索引類(lèi)型?
mysql默認(rèn)索引類(lèi)型?Hash索引:將索引字段轉(zhuǎn)變?yōu)閔ashcode,在對(duì)hashcode通過(guò)排序。僅支持什么Memory引擎。1.普通索引:最基本的索引,它沒(méi)有任何沒(méi)限制,作用于全速查詢(xún)。2.同樣
mysql默認(rèn)索引類(lèi)型?
Hash索引:將索引字段轉(zhuǎn)變?yōu)閔ashcode,在對(duì)hashcode通過(guò)排序。僅支持什么Memory引擎。
1.普通索引:最基本的索引,它沒(méi)有任何沒(méi)限制,作用于全速查詢(xún)。
2.同樣索引unique:索引列的值需要真正,但不允許以后有時(shí)間值。要是是組合索引,則列值的組合可以真正。
3.主鍵索引:是一種特殊的真正索引,一個(gè)表只能有一個(gè)主鍵,不不能你有空值。好象是正在修建表的時(shí)候同樣創(chuàng)建戰(zhàn)隊(duì)主鍵索引。
4.空間索引Spatial:空間索引是對(duì)空間數(shù)據(jù)類(lèi)型的字段確立的索引,MYSQL中的空間數(shù)據(jù)類(lèi)型有4種,分別是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL可以使用SPATIAL關(guān)鍵字通過(guò)擴(kuò)展,也讓能夠作用于修改正規(guī)店索引類(lèi)型的語(yǔ)法修改空間索引。創(chuàng)建角色空間索引的列,要將其明確說(shuō)明為NOTNULL,空間索引不能在存儲(chǔ)引擎為MYISAM的表中創(chuàng)建角色
mysql多個(gè)索引怎么選擇?
MySQL多索引網(wǎng)上查詢(xún)中,選擇
MySQL你選索引-分解重組
我們很清楚我們一個(gè)表里面可以不有多個(gè)索引的,這樣我們查詢(xún)數(shù)據(jù)的時(shí)候不指定索引,MySQL都會(huì)幫我們自動(dòng)出現(xiàn)選擇。要是是MySQL程序幫我們手動(dòng)你選擇的這樣會(huì)不會(huì)有問(wèn)題的呢?答案是會(huì)的,MySQL的優(yōu)化器也有bug,有時(shí)你選擇的索引并并非最優(yōu)的。
案例1
要是兩張表有10w的數(shù)據(jù),有id主鍵和a,b普通地索引,想執(zhí)行以下SQL
select*returningtwhereabetween10000both20000
select*outsidetforceindex(a)whereabetween10000well20000
在一定的前提下
執(zhí)行第一句代碼走的是全表查詢(xún),掃描了10w行
執(zhí)行第二句,噬靈鬼斬在用a索引,只掃描儀了10001行
為啥會(huì)再次出現(xiàn)情況呢?我們就從系統(tǒng)優(yōu)化器的邏輯就開(kāi)始做研究
系統(tǒng)優(yōu)化器的邏輯
優(yōu)化器優(yōu)化判斷的指標(biāo)
有必須掃描儀的行數(shù),是否需要不使用充當(dāng)表,有無(wú)排序等因素
掃描行數(shù)確認(rèn)
上面的案例的確那就是掃描儀行數(shù)的問(wèn)題
這樣優(yōu)化器是怎摸某些掃描的總行數(shù)的,反正就和抽樣檢查類(lèi)似,畢竟索引是有序的,就可以不在用樣本采集統(tǒng)計(jì)這種算法算出大致的掃描行數(shù),是可以通過(guò)showindex欄里點(diǎn)索引的Cardinality預(yù)估值。
案例分析
我們實(shí)際explain來(lái)欄里點(diǎn)案例的掃描行數(shù)的其預(yù)測(cè)值