2017-07-29 102 views
0

我的問題全部在標題中。爲什麼索引真的讓查詢如此之快?我讀過一些關於索引的文章以及如何使用它們。但是當我在列上創建索引時,我仍然不知道後臺會發生什麼情況?索引如何使速度更快?

它會對行進行排序嗎?好吧?你知道,當我在兩列創建一個複合索引時,我的一個查詢的速度從4 sec減少到0.04 sec

無論如何,我很感興趣瞭解創建索引時會發生什麼?他們如何幫助演出?

+2

在https://stackoverflow.com/questions/1108/how-does-database-indexing-work –

+2

偷看參見[對數據庫管理員的網站這篇文章](https://dba.stackexchange.com/questions/73081/mysql-how-index-speed-up-query-execution)並且Google是網絡上所有頁面的索引,您應該在提出問題之前使用它 – RiggsFolly

+1

[數據庫索引如何工作?](https://stackoverflow.com/questions/1108/how-does-database-indexing-work) – Isac

回答

1

讓我們拿一張有50條記錄的表,它沒有索引。

你也許要查詢第49個記錄,當你鍵入

select * from <myTable> where Id='49' 

在後臺會發生什麼事是,每一頁或每一行進行迭代,並檢查該ID的行是否是第49與否,一旦它在49日落地,它就會推動屏幕上的那一行。但需要注意的一點是每個迭代的行先被拉入內存,然後將最終結果推送到屏幕上

如果您在ID列上添加了一個索引,該怎麼辦?會發生什麼情況會創建一個單獨的表,用於存儲ID值及其各自的行地址。因此,現在當您基於ID進行查詢時,它會很快找到該特定ID的行地址,並將其抽入內存,並根據您想要的內容(「*」或某些列)將其過濾到內存中並推入屏幕。

這可能幫助你

https://www.youtube.com/watch?v=rtmeNwn4mEg&t=601s

+0

這不是一個很好的解釋;它混淆了具有'49'的'id'的記錄與(相同的)記錄的非常不同的想法是有序排列的'49'。數據庫系統的基本特徵不是記錄按任何特定順序存儲。 –

+0

我明白你的觀點@HighPerformanceMark,但是在開始時我提到了一個有50行的表格,我只是在這裏給出了一個簡單的例子。可能下次我們可以給出一個比這個更好的例子 –