
文章插圖
sql 的優(yōu)化大多數(shù)情況下是索引的優(yōu)化,那么,什么情況下該創(chuàng)建索引,什么情況下不創(chuàng)建索引呢,回答這個(gè)問(wèn)題之前,先來(lái)了解一下基數(shù)和選擇性吧 。
基數(shù)在 Oracle 數(shù)據(jù)庫(kù)中,某一列的唯一鍵的數(shù)量叫做基數(shù) 。
舉個(gè)例子,比如一張表中有個(gè) sex 字段,它的值只有 “男” 和 “女” 兩種情況,那我們就說(shuō)這一列的基數(shù)是2 。
我們可以通過(guò)如下語(yǔ)句來(lái)查詢(xún)一個(gè)字段的基數(shù) 。
select count(distinct deptno) as num from emp當(dāng)一個(gè)字段的基數(shù)越大的時(shí)候,該列的數(shù)據(jù)分布可能就越均衡 。字段的基數(shù)越小時(shí),該列的數(shù)據(jù)分布可能就越不均衡 。
舉個(gè)例子,在一個(gè)有10000行數(shù)據(jù)的表中,sex 字段基數(shù)為2,他的數(shù)據(jù)分布可能為9999行是男的,1行是女的,這是分布不均衡的現(xiàn)象 。而在身份證字段中,它的基數(shù)是10000,每一行都是一個(gè)不同的身份證號(hào)碼,這是分布均衡的現(xiàn)象 。
我們可以通過(guò) group by 語(yǔ)句來(lái)查看數(shù)據(jù)的分布情況 。
select deptno,count(1) from emp group by deptno這個(gè)時(shí)候如果我們要查詢(xún)表中性別為男的數(shù)據(jù),那么返回的數(shù)據(jù)就占了表中數(shù)據(jù)的 99.99%,其實(shí)就相當(dāng)于是全表掃描,這種情況就不應(yīng)該走索引了 。但是如果查詢(xún)表中性別為女的數(shù)據(jù),那么返回的數(shù)據(jù)就占了表中數(shù)據(jù)的 0.01%,這個(gè)時(shí)候時(shí)候應(yīng)該走索引 。
一般來(lái)說(shuō),當(dāng)返回表中 5% 以?xún)?nèi)的數(shù)據(jù)的時(shí)候,就應(yīng)該走索引 。超過(guò) 5% 的數(shù)據(jù)就要使用全表掃描 。但是這個(gè)說(shuō)法太絕對(duì)了,就像上面查詢(xún) sex 字段時(shí),查詢(xún)男性時(shí)候超過(guò)了 5%,查詢(xún)女性時(shí)候小于 5%,那這個(gè)字段需不需要?jiǎng)?chuàng)建索引呢?
這個(gè)時(shí)候,就需要引入選擇性的概念了 。
選擇性基數(shù)與表的總行數(shù)的比值就是選擇性 。
我們可以通過(guò)以下 sql 語(yǔ)句來(lái)查詢(xún)列的選擇性 。
select count(distinct deptno)/count(1) as selectivity from emp當(dāng)一個(gè)字段的選擇性大于 20%,說(shuō)明該列數(shù)據(jù)分布就是比較均衡的了 。這個(gè)時(shí)候如果在 where 子句中使用了該字段,那么就應(yīng)該創(chuàng)建索引 。
PS:文中使用了數(shù)據(jù)量較少的表來(lái)舉例子,是因?yàn)閿?shù)據(jù)清晰直觀,方便大家理解 。而在實(shí)際情況中,只有大表才會(huì)產(chǎn)生性能問(wèn)題 。如果一個(gè)表里只有十幾二十條數(shù)據(jù),也就無(wú)所謂優(yōu)化了 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專(zhuān)業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- mysql數(shù)據(jù)庫(kù)架構(gòu)講解 mysql數(shù)據(jù)庫(kù)介紹基本情況
- 數(shù)據(jù)庫(kù)多表查詢(xún)sql語(yǔ)句 sql數(shù)據(jù)庫(kù)安裝教程
- elasticsearch菜鳥(niǎo)教程 阿里云elasticsearch內(nèi)核介紹
- 開(kāi)菜鳥(niǎo)驛站需要哪些前提條件 無(wú)經(jīng)驗(yàn)的人可以開(kāi)菜鳥(niǎo)驛站嗎
- “抖音崩了”登上微博超話 或與被刪數(shù)據(jù)庫(kù)有關(guān)?
- “抖音崩了”微博閱讀超12億 近日網(wǎng)傳字節(jié)實(shí)習(xí)生刪數(shù)據(jù)庫(kù)
- mysql恢復(fù)表數(shù)據(jù) mysql修復(fù)數(shù)據(jù)庫(kù)命令
- 華為云數(shù)據(jù)庫(kù)的優(yōu)勢(shì) 華為云數(shù)據(jù)庫(kù)怎么樣
- 數(shù)據(jù)庫(kù)性能優(yōu)化方法 oracle性能調(diào)優(yōu)總結(jié)
- oracle數(shù)據(jù)庫(kù)常用命令 mysql數(shù)據(jù)遷移到oracle
