首頁  >  文章  >  資料庫  >  建立索引可以加快表中資料查詢的速度嗎

建立索引可以加快表中資料查詢的速度嗎

(*-*)浩
(*-*)浩原創
2019-07-30 14:57:346365瀏覽

首先明白為什麼索引會增加速度,DB在執行一條Sql語句的時候,預設的方式是根據搜尋條件進行全表掃描,遇到符合條件的就加入搜尋結果集合。

建立索引可以加快表中資料查詢的速度嗎

如果我們對某一字段增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。 (推薦學習:MySQL影片教學

新增索引的話,先去索引清單中查詢,而我們的索引清單是B類樹的資料結構,查詢的時間複雜度為O(log2N),定位到特定值得行就會非常快,所以其查詢速度就會非常快。

為什麼說B -tree比B 樹更適合實際應用中作業系統的檔案索引和資料庫索引?

1) B -tree的磁碟讀寫代價更低

B -tree的內部結點並沒有指向關鍵字具體資訊的指標。因此其內結點相對B 樹較小。如果把所有相同內部結點的關鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量就越多。一次性讀入記憶體中的需要尋找的關鍵字也就越多。相對來說IO讀寫次數也就降低了。

舉個例子,假設磁碟中的一個磁碟區容納16bytes,而一個關鍵字2bytes,一個關鍵字具體資訊指標2bytes。一棵9階B-tree(一個結點最多8個關鍵字)的內部結點需要2個盤快。而B 樹內部結點只需要1個盤快。當需要把內部結點讀入記憶體的時候,B 樹就比B 樹多一次盤塊查找時間(在磁碟中就是盤片旋轉的時間)。

2) B -tree的查詢效率更加穩定

由於非終結點並不是最終指向檔案內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查找必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每個資料的查詢效率相當。

索引

使用索引可快速存取資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓(lname)欄位。如果您想要按姓查找特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資訊。

注意:並非所有的資料庫都以相同的方式使用索引。

作為通用規則,只有當經常查詢索引列中的資料時,才需要在表上建立索引。索引佔用磁碟空間,並且降低新增、刪除和更新行的速度。在多數情況下,索引用於資料檢索的速度優勢大大超過它的。

更多MySQL相關技術文章,請造訪MySQL教學欄位進行學習!

以上是建立索引可以加快表中資料查詢的速度嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn