什麼情況下需要建立索引? 索引的作用?為什麼能夠提高查詢速度?(索引的原理) 索引有什麼副作用嗎?
https://www.cnblogs.com/Berryxiong/p/6249427.html
為什麼能夠提高查詢速度?
索引就是通過事先排好序,從而在查詢時可以應用二分查詢等高效率的演算法。
一般的順序查詢,複雜度為O(n),而二分查詢複雜度為O(log2n)。當n很大時,二者的效率相差及其懸殊。
舉個例子:
表中有一百萬條資料,需要在其中尋找一條特定id的資料。如果順序查詢,平均需要查詢50萬條資料。而用二分法,至多不超過20次就能找到。二者的效率差了2.5萬倍!
在一個或者一些欄位需要頻繁用作查詢條件,並且表資料較多的時候,建立索引會明顯提高查詢速度,因為可由全表掃描改成索引掃描。
(無索引時全表掃描也就是要逐條掃描全部記錄,直到找完符合條件的,索引掃描可以直接定位)
不管資料表有無索引,首先在SGA的資料緩衝區中查詢所需要的資料,如果資料緩衝區中沒有需要的資料時,伺服器程式才去讀磁碟。
1、無索引,直接去讀表資料存放的磁碟塊,讀到資料緩衝區中再查詢需要的資料。
2、有索引,先讀入索引表,通過索引表直接找到所需資料的實體地址,並把資料讀入資料緩衝區中。
索引有什麼副作用嗎?
(1)索引是有大量資料的時候才建立的,沒有大量資料反而會浪費時間,因為索引是使用二叉樹建立.
(2)當一個系統查詢比較頻繁,而新建,修改等操作比較少時,可以建立索引,這樣查詢的速度會比以前快很多,同時也帶來弊端,就是新建或修改等操作時,比沒有索引或沒有建立覆蓋索引時的要慢。
(3)索引並不是越多越好,太多索引會佔用很多的索引表空間,甚至比儲存一條記錄更多。
對於需要頻繁新增記錄的表,最好不要建立索引,沒有索引的表,執行insert、append都很快,有了索引以後,會多一個維護索引的操作,一些大表可能導致insert 速度非常慢。
提高查詢速度,有利於排序和分組. (排序和分組如用不上索引,則會產生臨時表和filesort的過程)
根據業務邏輯,分析列查詢的頻度和順序, 建立索引和複合索引.
主鍵索引(primary key), ---->不需要有索引名,因為只有一個主鍵索引
唯一索引(unique key)
---->unique key email(email(10))
括號裡面是表欄位,外面是索引名字,其他索引一樣
裡面的10是指索引的長度,如1234567899@qq.com,只取出了前面10個字元做索引
普通索引(key),
全文索引(fulltext key)--->中文環境下基本無效,一般用第三方方案如sphinx(中文分詞)
多列索引:key xm(xing,ming)用xing和ming兩個欄位做索引
冗餘索引:在某個欄位上有多個索引,如 key xm(xing,ming) ,key m(ming),有兩個 就是冗餘索引
相關文章
- 索引為什麼能提供查詢效能...索引
- MySQL索引憑什麼能讓查詢效率提高這麼多?MySql索引
- SQL SERVER中什麼情況會導致索引查詢變成索引掃描SQLServer索引
- MySQL索引那些事:什麼是索引?為什麼加索引就查得快了?MySql索引
- oracle 為什麼沒有使用索引的一種情況Oracle索引
- 深入淺出空間索引:為什麼需要空間索引索引
- oracle組合索引什麼情況下生效?Oracle索引
- 阿里面試:MySQL索引憑什麼能讓查詢效率提高這麼多?阿里面試MySql索引
- 【MOS:1549181.1】為何在查詢中索引未被使用--為什麼索引沒有被使用索引
- MYSQL索引為什麼這麼快?瞭解索引的神奇之處MySql索引
- oracle為什麼不走索引Oracle索引
- Oracle 查詢行數很少,為什麼不走索引?Oracle索引
- 為什麼我使用了索引,查詢還是慢?索引
- Mysql:好好的索引,為什麼要下推?MySql索引
- 面試官這樣問你:為什麼MySQL新增索引後就可以提高查詢速度面試MySql索引
- ElasticSearch 倒排索引(Inverted Index)| 什麼是倒排索引?Elasticsearch索引Index
- mysql為什麼加索引就能快MySql索引
- mysql字首索引是什麼MySql索引
- 一個很簡單的查詢,為什麼用不到索引索引
- 基於COST優化,oracle什麼情況不走索引優化Oracle索引
- (轉)Oracle為什麼不使用我的索引?Oracle索引
- 為什麼索引的PCTUSED被設定為0索引
- MySQL實戰 | 為什麼要使用索引?MySql索引
- MySQL索引為什麼使用B+樹?MySql索引
- mysql唯一索引是什麼MySql索引
- 為什麼有時Oracle資料庫不用索引來查詢資料?(轉)Oracle資料庫索引
- 【索引】Oracle查詢指定索引提高查詢效率索引Oracle
- Python 的切片為什麼不會索引越界?Python索引
- 【TUNE_ORACLE】你建立的索引為什麼不工作了?(一)Oracle索引
- 【TUNE_ORACLE】你建立的索引為什麼不工作了?(三)Oracle索引
- 【TUNE_ORACLE】你建立的索引為什麼不工作了?(二)Oracle索引
- 【開發總結】order by 為什麼沒有走索引?索引
- 聚簇索引和非聚簇索引到底有什麼區別?索引
- oracle全文索引之同步和優化索引做了什麼Oracle索引優化
- 為什麼索引無法使用is null和is not null索引Null
- Elasticsearch 中為什麼選擇倒排索引而不選擇 B 樹索引Elasticsearch索引
- MySQL 為什麼全文索引查中文找不結果MySql索引
- MySQL查詢為什麼沒走索引?這篇文章帶你全面解析MySql索引