索引碎碎念

索引的概念

索引具被,可以理解為一種特殊的目錄。就好比我們看書或者查字典蚓再,只需要查目錄灶泵,就能迅速定位到需要的內容,這樣遠比從頭翻到尾要快对途。索引的原理與之類似赦邻。


索引的作用

1.索引可以提高數(shù)據庫查詢和應用程序的性能;
2.索引可以減少為返回查詢結果集而必須讀取的數(shù)據量实檀;
3.索引還可以強制表中的行具有唯一性惶洲,從而確保表數(shù)據的數(shù)據完整性

索引的組成

索引包含從表或視圖中一個或多個列生成的鍵,以及映射到指定數(shù)據的存儲位置的指針膳犹。
分為兩類:

聚集索引和非聚集索引恬吕。

索引的物理結構--B樹

索引的物理結構

今天我來討論的是我們的查詢語句,什么時候會走索引须床。用到的數(shù)據庫有PostgreSQL和MySQL铐料。都是主流的開源數(shù)據庫。目前Pg大有超越MySQL的趨勢豺旬。

在我的實驗中钠惩,開發(fā)環(huán)境是 Java8+eclipse+PostgreSQL/MySQL+Windows7.

我們來新建一個表,并測試索引的作用族阅。

Java插入100000條數(shù)據

在還沒有建立索引的時候篓跛,我們來做一個查詢:

100000條數(shù)據
未建立索引查詢
未建索引,檢索到40835條數(shù)據坦刀,花時間3.2秒

對表中的age字段建立索引后愧沟,查詢得:

建立age字段索引后查詢

比對—真實情況

explain SQL語句后

發(fā)現(xiàn),其實當你建立索引后查詢鲤遥,該語句并未走索引沐寺,也就是說你的索引沒用生效。在postgresql數(shù)據庫中盖奈,你建立了單個索引混坞,如果用between,是用不到索引的卜朗。不能單憑一兩次的模擬效果拔第,看到查詢速度快了就以為是索引的作用。

那么场钉,為什么我們看到第二次確實比第一次時間少了很多呢蚊俺?原因我想應該是PostgreSQL對其作了優(yōu)化。因為兩次的SQL是一模一樣逛万,兩次查詢時間間隔很短泳猬。當?shù)谝淮挝唇⑺饕樵兒笈疲胁糠謹?shù)據被緩存在內存中,當你第二次建立了索引查詢得封,發(fā)現(xiàn)時間雖然短了埋心,但確不是因為索引,而是因為部分數(shù)據駐留在內存忙上,這樣查詢出來肯定比第一次查詢完全IO要快拷呆。這個操作系統(tǒng)的cache命中率是一個道理。


再來看一個例子

未建立索引疫粥,查詢語句如下:

未建立索引

只建立了一個id索引的茬斧。

只建立了一個ID索引

建立了一個age索引,走了age的索引梗逮。


只建立了一個age索引

建立了一個age+id索引项秉,只走了age的索引。

age+id的聯(lián)合索引

總結

對于這樣的查詢語句:
Select *from tb_company where age=$age order by id desc limit 10000慷彤;
對age建索引=對age和id建索引娄蔼,即A+B=A
但是A+B不能替代B(來自于網絡)
有沒有走索引,也不能憑一兩次的數(shù)據觀察所得底哗,而是要通過專門的分析工具分析岁诉。


對于存在like關鍵字的情況探討

(1)當%放在后面的時候

%放在后面的匹配

(2)前后都用%匹配‘

前后都是%匹配

(3)只在前面%匹配

Paste_Image.png

看實際的性能分析

Paste_Image.png

對于只在后面加%的查詢,PostgreSQL數(shù)據庫是走了索引的艘虎。

Paste_Image.png

對于前后都加了%唉侄,PostgreSQL數(shù)據庫也是走了索引咒吐。

結論

對于PostgreSQL數(shù)據庫野建,其對各個查詢語句,只要建立了索引恬叹,都走了索引候生,那我們接下來看看MySQL的情況。



MySQL的情況

address索引绽昼,前面加%唯鸭,全表掃描

Paste_Image.png

先來簡要說一下這里的各個字段代表的意思:

select_type代表該SQL是一條簡單的SQL,沒有join硅确,也沒有union目溉。
table代表你查詢的是哪個表。
type為all表示作了全表掃描菱农。
rows代表影響的行數(shù)缭付。
possible_keys** 提示使用哪個索引會在該表中找到行,不太重要
keys MYSQL使用的索引循未,簡單且重要
key_len MYSQL使用的索引長度
ref ref列顯示使用哪個列或常數(shù)與key一起從表中選擇行陷猫。

address索引,后面加%,走了索引.

Paste_Image.png

address索引绣檬,前后加%足陨,全表掃描。

Paste_Image.png

對于like是否走索引的總結

對于like關鍵字娇未,通過以上實驗和搜集的資料墨缘,得出如下結論:
這就是postgresql和mysql的區(qū)別,mysql有如下情況:
1 where address like ‘新疆維吾爾%’ 走了索引
2 where address like ‘%疆維吾爾%’ 并沒有走索引
3.where address like '%疆維吾爾自治區(qū)'零抬,沒有走索引
但是postgresql對此做了優(yōu)化飒房,以上兩種情況都走了索引。


今天講的索引媚值,可能是很簡單的內容狠毯,對于高手來說,這應該是很基礎很基礎的東西褥芒。索引的內容博大精深嚼松,希望與大家一起探討,共同進步C谭觥O仔铩!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末坷牛,一起剝皮案震驚了整個濱河市罕偎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌京闰,老刑警劉巖颜及,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蹂楣,居然都是意外死亡俏站,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門痊土,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肄扎,“玉大人,你說我怎么就攤上這事赁酝》胳簦” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵酌呆,是天一觀的道長衡载。 經常有香客問我,道長肪笋,這世上最難降的妖魔是什么月劈? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任度迂,我火速辦了婚禮,結果婚禮上猜揪,老公的妹妹穿的比我還像新娘惭墓。我一直安慰自己,他們只是感情好而姐,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布腊凶。 她就那樣靜靜地躺著,像睡著了一般拴念。 火紅的嫁衣襯著肌膚如雪钧萍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天政鼠,我揣著相機與錄音风瘦,去河邊找鬼。 笑死公般,一個胖子當著我的面吹牛万搔,可吹牛的內容都是我干的。 我是一名探鬼主播官帘,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瞬雹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刽虹?” 一聲冷哼從身側響起酗捌,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涌哲,沒想到半個月后胖缤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡膛虫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年草姻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稍刀。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖敞曹,靈堂內的尸體忽然破棺而出账月,到底是詐尸還是另有隱情,我是刑警寧澤澳迫,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布局齿,位于F島的核電站,受9級特大地震影響橄登,放射性物質發(fā)生泄漏抓歼。R本人自食惡果不足惜讥此,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谣妻。 院中可真熱鬧萄喳,春花似錦、人聲如沸蹋半。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽减江。三九已至染突,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辈灼,已是汗流浹背份企。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巡莹,地道東北人薪棒。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像榕莺,于是被迫代替她去往敵國和親俐芯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容