日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库索引的作用以及索引基本原理

發布時間:2024/8/1 数据库 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库索引的作用以及索引基本原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當我們面對大量的數據查詢時,為了提高查詢效率,我們在數據庫中總要使用到索引。那么索引究竟是怎么樣的東西呢?

索引本質

索引其實就是一種數據結構,他將數據庫中的數據以一定的數據結構算法進行存儲,能夠幫助我們快速的檢索數據庫中的數據。

何時使用索引

1.當某些列的查詢概率比較高或經常作為where條件的列。

2.在作為主鍵的列上。

3.在經常用在表連接的列上。

在這些時候,我們就要考慮使用此列作為一個索引

索引類型

1.在Mysql數據庫的索引中,主要包括Hash索引和B+ Tree索引,我們常用的InnoDB引擎,默認的是B+樹。

2.Hash索引和B+ Tree索引的區別:

? ? 1)Hash索引底層是哈希表,哈希表是一種以key-value存儲數據的結構,所以多個數據在存儲關系上是完全沒有任何順序關系的,所以,對于區間查詢(大于、小于的范圍查詢)是無法直接通過索引查詢的,就需要全表掃描。所以,哈希索引只適用于等值查詢的場景。而B+ Tree是一種多路平衡查詢樹,所以他的節點是天然有序的(左子節點小于父節點、父節點小于右子節點),所以對于范圍查詢的時候不需要做全表掃描。

? ? 2)哈希索引沒辦法利用索引完成排序(例如order by);

? ? 3)哈希索引不支持多列聯合索引的最左匹配規則。(多列索引(聯合索引)有最左前綴的原則:即最左優先。
如果我們建立了一個2列的聯合索引(col1,col2),實際上已經建立了兩個聯合索引(col1)、(col1,col2);
如果有一個3列索引(col1,col2,col3),實際上已經建立了三個聯合索引(col1)、(col1,col2)、(col1,col2,col3),查詢時,會先查最左的第一個索引col1。)

? ? 4)如果有大量重復鍵值得情況下,哈希索引的效率會很低,因為存在哈希碰撞問題。

3.在B+ Tree索引下還分為了聚簇索引和非聚簇索引。在 InnoDB 里,索引B+ Tree的葉子節點存儲了整行數據的是主鍵索引,也被稱之為聚簇索引。而索引B+ Tree的葉子節點存儲了主鍵的值的是非主鍵索引,也被稱之為非聚簇索引。聚簇索引查詢會更快,因為主鍵索引樹的葉子節點直接就是我們要查詢的整行數據了。而非主鍵索引的葉子節點是主鍵的值,查到主鍵的值以后,還需要再通過主鍵的值再回表進行一次查詢。

4.深入探索問題——什么情況下會發生明明創建了索引,但是執行的時候并沒有通過索引呢?

答:當查詢優化器未選擇到該索引的執行計劃查詢優化器:?一條SQL語句的查詢,可以有不同的執行方案,至于最終選擇哪種方案,需要通過優化器進行選擇,選擇執行成本最低的方案。 在一條單表查詢語句真正執行之前,MySQL的查詢優化器會找出執行該語句所有可能使用的方案,對比之后找出成本最低的方案。這個成本最低的方案就是所謂的執行計劃。 優化過程大致如下: 1、根據搜索條件,找出所有可能使用的索引 2、計算全表掃描的代價 3、計算使用不同索引執行查詢的代價 4、對比各種執行方案的代價,找出成本最低的那一個)

索引的缺點

1.創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。
2.索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
3.當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

索引是否生效

1.在數據庫新建一個查詢,使用?explain 關鍵字進行查詢。

例如?explain select * from user?WHERE company_id=410?

此時在查詢結果中就會發現

possible_keys列下面的值就是你創建的索引名稱,如果為空,則說明你的索引未被使用到。

總結

以上是生活随笔為你收集整理的数据库索引的作用以及索引基本原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。