查询除了一列意外_想让你的查询语句变快吗?
蔣蔣~大家吼啊 相信大家都遇到過查詢語句龜速的情況,那心情,那酸爽
大家別怕,我們有索引這個東西
索引:索引提供指向存儲在表的指定列中的數(shù)據(jù)值的指針,然后根據(jù)您指定的排序順序?qū)@些指針排序。數(shù)據(jù)庫使用索引以找到特定值,然后順指針找到包含該值的行。這樣可以使對應(yīng)于表的SQL語句執(zhí)行得更快,可快速訪問數(shù)據(jù)庫表中的特定信息。
而索引也有很多種類的
索引分類
邏輯:單行索引、多行索引、唯一索引、非唯一索引、函數(shù)索引
物理:分區(qū)索引、非分區(qū)索引、B-tree索引、bitmap索引
B-tree索引
它的存儲結(jié)構(gòu)類似于書的目錄索引結(jié)構(gòu),有分支節(jié)點和葉子節(jié)點,分支節(jié)點相當(dāng)于書的大目錄,葉子節(jié)點相當(dāng)于具體到頁的索引。
優(yōu)點:適合高基數(shù)的列(唯一值多),適合與大量的增、刪、改(OLTP)。
缺點:不適合鍵值重復(fù)率較高的字段上使用。
Bitmap索引
是由一串位所組成的。如果某一位置位(為1),就表示該位所對應(yīng)的行包含索引的鍵值。如果該位沒有被置位(為0),就表示該位所對應(yīng)的行不包含索引的鍵值。
優(yōu)點:OLAP 例如報表類數(shù)據(jù)庫 重復(fù)率高的數(shù)據(jù) 特定類型的查詢例如count、or、and等邏輯操作因為只需要進行位運算即可得到我們需要的結(jié)果。
缺點:不適合重復(fù)率低的字段,還有經(jīng)常DML操作(insert,update,delete),因為位圖索引的鎖代價極高,修改一個位圖索引段影響整個位圖段,所以對于OLTP 系統(tǒng)位圖索引基本上是不適用的。
索引掃描的種類
根據(jù)索引的類型與where限制條件的不同分類
(1) 索引唯一掃描(index unique scan)通過unique或primary key約束來保證只返回一條數(shù)據(jù),那么優(yōu)化器就會選擇索引唯一掃描。
(2) 索引范圍掃描(index range scan)使用一個索引存取多行數(shù)據(jù)或者索引鍵非唯一,即使返一行記錄也走范圍掃描。
(3) 索引跳躍掃描(index skip scan)當(dāng)表有一個復(fù)合索引,而在查詢中有除了索引中第一列的其他列作為條件,這時候查詢計劃就有可能使用到。
(3) 索引全掃描(index full scan)和索引快速掃描(index fast full scan)如果想搜索的列都包含在索引里面,那么index full scan 和 index fast full scan 都可以被采用代替full table scan。
index full scan首先要找到索引的根,然后通過枝節(jié)點找到第一個葉節(jié)點,然后再順著葉節(jié)點鏈掃描整個索引,只能使用單塊讀,會發(fā)現(xiàn)大量的db file sequential read等待。
index fast full scan對索引的掃描可以根據(jù)該索引的extent來進行,采用多塊讀的方式進行。因此在這類操作中,我們可以看到會話會大量的出現(xiàn)db file scattered read等待。
索引的適用場合
B*Tree索引
常規(guī)索引,多用于oltp系統(tǒng),快速定位行,應(yīng)建立于存在很少相同值的列。
反向索引
B*Tree的衍生產(chǎn)物,應(yīng)用于特殊場合,在并發(fā)環(huán)境序列增加的列上建立,不適合做范圍掃描。
降序索引
B*Tree的衍生產(chǎn)物,應(yīng)用于有降序排列的搜索語句中,索引中儲存了降序排列的索引碼,提供了快速的降序搜索。
函數(shù)索引
B*Tree的衍生產(chǎn)物,應(yīng)用于查詢語句條件列上包含函數(shù)的情況,索引中儲存了經(jīng)過函數(shù)計算的索引碼值。可以在不修改應(yīng)用程序的基礎(chǔ)上能提高查詢效率。
位圖索引
位圖方式管理的索引,適用于OLAP(在線分析)和DSS(決策處理)系統(tǒng),適合集中讀取,不適合插入和修改,提供比B*Tree索引更節(jié)省的空間。
常見幾種不走索引的場景
(1)隱式類型轉(zhuǎn)換
(2)索引失效
(3)like '%***'
(4)is null 或者is not null
(5)使用<> 或者!=
(6)在索引列上使用函數(shù)
(7)在索引列上運算
點點關(guān)注不迷路~點點轉(zhuǎn)發(fā)真威武~每日更新最新動態(tài)~謝謝各位老爺ヾ(?゚▽゚)
總結(jié)
以上是生活随笔為你收集整理的查询除了一列意外_想让你的查询语句变快吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: api php usdt 以太坊_以太坊
- 下一篇: 新建文件注释_PDF汇总注释原来如此简单