我的問題全部在標題中。爲什麼索引真的讓查詢如此之快?我讀過一些關於索引的文章以及如何使用它們。但是當我在列上創建索引時,我仍然不知道後臺會發生什麼情況?索引如何使速度更快?
它會對行進行排序嗎?好吧?你知道,當我在兩列創建一個複合索引時,我的一個查詢的速度從4 sec
減少到0.04 sec
。
無論如何,我很感興趣瞭解創建索引時會發生什麼?他們如何幫助演出?
我的問題全部在標題中。爲什麼索引真的讓查詢如此之快?我讀過一些關於索引的文章以及如何使用它們。但是當我在列上創建索引時,我仍然不知道後臺會發生什麼情況?索引如何使速度更快?
它會對行進行排序嗎?好吧?你知道,當我在兩列創建一個複合索引時,我的一個查詢的速度從4 sec
減少到0.04 sec
。
無論如何,我很感興趣瞭解創建索引時會發生什麼?他們如何幫助演出?
讓我們拿一張有50條記錄的表,它沒有索引。
你也許要查詢第49個記錄,當你鍵入
select * from <myTable> where Id='49'
在後臺會發生什麼事是,每一頁或每一行進行迭代,並檢查該ID的行是否是第49與否,一旦它在49日落地,它就會推動屏幕上的那一行。但需要注意的一點是每個迭代的行先被拉入內存,然後將最終結果推送到屏幕上
如果您在ID列上添加了一個索引,該怎麼辦?會發生什麼情況會創建一個單獨的表,用於存儲ID值及其各自的行地址。因此,現在當您基於ID進行查詢時,它會很快找到該特定ID的行地址,並將其抽入內存,並根據您想要的內容(「*」或某些列)將其過濾到內存中並推入屏幕。
這可能幫助你
這不是一個很好的解釋;它混淆了具有'49'的'id'的記錄與(相同的)記錄的非常不同的想法是有序排列的'49'。數據庫系統的基本特徵不是記錄按任何特定順序存儲。 –
我明白你的觀點@HighPerformanceMark,但是在開始時我提到了一個有50行的表格,我只是在這裏給出了一個簡單的例子。可能下次我們可以給出一個比這個更好的例子 –
在https://stackoverflow.com/questions/1108/how-does-database-indexing-work –
偷看參見[對數據庫管理員的網站這篇文章](https://dba.stackexchange.com/questions/73081/mysql-how-index-speed-up-query-execution)並且Google是網絡上所有頁面的索引,您應該在提出問題之前使用它 – RiggsFolly
[數據庫索引如何工作?](https://stackoverflow.com/questions/1108/how-does-database-indexing-work) – Isac