1 前言客服業務受到sql語句的影響非常大,在規模比較大的局點,往往因為乙個小的sql語句不夠優化,導致資料庫效能急劇下降,小型機idle所剩無幾,應用伺服器斷連、超時,嚴重影響業務的正常執行。因此,稱低效的sql語句為客服業務的『惡龍』並不過分。資料庫的優化方法有很多種,在應用層來說,主要是基於索引的優化。本次秘笈根據實際的工作經驗,在研發原來已有的方法的基礎上,進行了一些擴充,總結了基於索引的sql語句優化的降龍十八掌,希望有一天你能用其中一掌來馴服客服業務中橫行的『惡龍』。
2 總綱——建立必要的索引降龍十八掌,總綱只有一句話:建立必要的索引,這就是後面降龍十八掌的內功基礎。這一點看似容易實際卻很難。難就難在如何判斷哪些索引是必要的,哪些又是不必要的。判斷的最終標準是看這些索引是否對我們的資料庫效能有所幫助。具體到方法上,就必須熟悉資料庫應用程式中的所有sql語句,從中統計出常用的可能對效能有影響的部分sql,分析、歸納出作為where條件子句的字段及其組合方式;在這一基礎上可以初步判斷出哪些表的哪些字段應該建立索引。其次,必須熟悉應用程式。必須了解哪些表是資料操作頻繁的表;哪些表經常與其他表進行連線;哪些表中的資料量可能很大;對於資料量大的表,其中各個欄位的資料分布情況如何;等等。對於滿足以上條件的這些表,必須重點關注,因為在這些表上的索引,將對sql語句的效能產生舉足輕重的影響。不過下面還是總結了一下降龍十八掌內功的入門基礎,建立索引常用的規則如下: (1) 表的主鍵、外來鍵必須有索引; (2) 資料量超過300的表應該有索引; (3) 經常與其他表進行連線的表,在連線欄位上應該建立索引; (4) 經常出現在where子句中的字段,特別是大表的字段,應該建立索引; (5) 索引應該建在選擇性高的字段上; (6) 索引應該建在小字段上,對於大的文字字段甚至超長字段,不要建索引; (7) 復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替: a、正確選擇復合索引中的主列字段,一般是選擇性較好的字段; b、復合索引的幾個字段是否經常同時以and方式出現在where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引; c、如果復合索引中包含的字段經常單獨出現在where子句中,則分解為多個單字段索引; d、如果復合索引所包含的字段超過3個,那麼仔細考慮其必要性,考慮減少復合的字段; e、如果既有單字段索引,又有這幾個欄位上的復合索引,一般可以刪除復合索引; (8) 頻繁進行資料操作的表,不要建立太多的索引; (9) 刪除無用的索引,避免對執行計畫造成負面影響; 以上是一些普遍的建立索引時的判斷依據。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。因為太多的索引與不充分、不正確的索引對效能都毫無益處:在表上建立的每個索引都會增加儲存開銷,索引對於插入、刪除、更新操作也會增加處理上的開銷。 另外,過多的復合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低資料增加刪除時的效能,特別是對頻繁更新的表來說,負面影響更大。
3 降龍十八掌
SQL優化之索引
sql優化有很多方法,今天來說一說資料庫索引。舉例說明 假設有乙個圖書book表,裡面有欄位id,name,isbn等。如果圖書數量巨大的話,我們通過isbn查詢通常是比較慢的。新增索引 create index index isbn on book isbn 查詢時間從0.134縮短到0.001,...
SQL優化之索引
舉例說明 假設有乙個圖書book表,裡面有欄位id,name,isbn等。如果圖書數量巨大的話,我們通過isbn查詢通常是比較慢的。這裡寫描述 新增索引 create index index isbn on book isbn 再次執行查詢 這裡寫描述 查詢時間從0.134縮短到0.001,效果還是...
sql語句優化五(索引的介紹)
一 索引的介紹 sql索引在資料庫優化中占有乙個非常大的比例,乙個好的索引的設計,可以讓你的效率提高幾十甚至幾百倍,在這裡將帶你一步步揭開他的神秘面紗。sql索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了sql server系統的效能,加快資料的查詢速度與減少系統的響應時間 下面舉兩個簡單的...