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