SQL優(yōu)化之你真的會(huì)用索引嗎?
點(diǎn)擊上方SQL數(shù)據(jù)庫(kù)開發(fā),關(guān)注獲取SQL視頻教程
SQL專欄
提到索引,想必小伙伴們都知道,它是為了提高查詢效率而生。但是在查詢過程中,怎么才能讓我們的查詢語句使用到索引?相必大家或多或少都會(huì)遇到這樣的問題。今天我們就來回答這個(gè)問題。
索引一般分為聚集索引和非聚集索引。
聚集索引速度很快,但只能建一個(gè),所以盡量把經(jīng)常使用的列建成聚集索引。
非聚集索引雖然沒聚集索引快,但是可以建多個(gè),比全表掃描快。
A.關(guān)聯(lián)條件上建立索引
在索引列上使用了運(yùn)算符的, 例如:T1.PRICE*0.5>20,這種不會(huì)使用索引 在索引列上使用了函數(shù)的, 例如:UPPER(T1.ADDRESS)='NEWYORK',也不會(huì)使用索引 在使用索引時(shí)存在空值NULL的, 例如:T1.ADDRESS IS NULL,那么在查詢時(shí)就不會(huì)走索引了 字符型數(shù)據(jù)不加引號(hào)也不會(huì)使用索引 例如:ORDER_ID原本是字符型,T1.ORDER_ID='112'會(huì)使用索引,但是如果去掉引號(hào),變成了T1.ORDER_ID=112,查詢語句不會(huì)報(bào)錯(cuò),但是不會(huì)使用索引了。 或(OR)和不等(<>,!=)以及NOT IN等這些也不會(huì)使用索引 經(jīng)常使用的LIKE,除了前置匹配,其他匹配均不走索引 例如:T1.ADDRESS LIKE ‘NEW%’,這個(gè)走索引,但是像 T1.ADDRESS LIKE ‘%NEW%’和T1.ADDRESS LIKE ‘%NEW’則均不走索引了 最后如果查詢優(yōu)化器判斷全表掃描比走索引還快也不會(huì)使用到索引。
不頻繁寫入和更新的列適合建立索引 經(jīng)常查詢的列適合建立索引 重復(fù)數(shù)據(jù)較少的可以建立索引
由于創(chuàng)建索引和維護(hù)索引耗時(shí),時(shí)間隨著數(shù)據(jù)的增加而增加,成正比;需要占物理空間;當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行維護(hù)時(shí),對(duì)索引也要進(jìn)行維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。基于這些缺點(diǎn),以下情況不適合建立索引
對(duì)于在查詢過程中很少使用或參考的列,不應(yīng)該創(chuàng)建索引。
對(duì)于那些只有很少數(shù)據(jù)值的列,不應(yīng)該創(chuàng)建索引,例如:性別。
對(duì)于那些定義為image,text和bit數(shù)據(jù)類型的列,不應(yīng)該創(chuàng)建索引。
當(dāng)修改性能遠(yuǎn)大于檢索性能,不應(yīng)該建立索引。
重復(fù)值較多的也不適合建立索引。
好了,今天的索引就講到這里,對(duì)優(yōu)化感興趣的小伙伴,可以加入我們的微信群,大家一起交流學(xué)習(xí)。
——End——
后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨 后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。 推薦閱讀 這是一個(gè)能學(xué)到技術(shù)的公眾號(hào),歡迎關(guān)注
