程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 2014年小結之sql語句優化,2014年小結sql

2014年小結之sql語句優化,2014年小結sql

編輯:MySQL綜合教程

2014年小結之sql語句優化,2014年小結sql


之前接手一個數據統計處理的小程序,本來邏輯上並沒什麼,只是數據量略大,某些表的數據達到了千萬級別..因為是統計,所以免不了各種連接各種查詢,結果這個小程序寫完後運行一次要1個小時..這的確有點出乎意料,所以著手優化一下..

1.添加索引

平時不注意或是數據量比較小的時候可能會忽略這個,加或是不加基本沒差別,但是當數據量很大的時候差別就非常明顯,沒有索引的情況下,在1萬條以內和10萬條以上的數據中查詢所用的時間差別已經能分辨出了.這裡有2點需要特別注意:

1)默認情況下我們創建表,數據庫會自動給我們添加一個默認索引,但是當采用create table 表名 as select 語句創建表時,數據庫是不會自動創建索引的,此時我們需要手動添加索引.

2)哪些字段需要添加索引?那些在我們查詢語句中起到橋梁(連接)作用的字段需要添加索引.因為只有在查詢條件中包含有索引字段才能享用索引帶來的速度提升.

可以說索引是提高查詢速度最明顯最簡單的方法,它可以令一個數分鐘的查詢在毫秒內完成,效率提升不是一點半點..

2.縮小查詢集合

既然是查詢,那一定有要查詢的集合,也就是 from 後面的集合.如果能縮小這個集合,那麼查詢遍歷一遍的時間也會縮減不少,整體的查詢時間自然會減少.主要有2個手段:

1)創建臨時查詢表.如果一個表的數據量很大,而我們只在其中滿足某些特定條件的數據集合中查詢,那麼我們完全可以首先從這個表中查詢出所有滿足特定條件的數據集合並創建成一個表,典型應用就是create table xx as select XX where xx ,這樣我們就得到一個比原始表小很多的臨時表,之後的所有查詢工作都從這張新表中進行即可..

2)優化查詢語句順序.where後的條件語句是從右向左執行的,所以我們可以把能排除掉更多數據的條件放到最右面,這樣執行後余下的數據集合會更小,接下來的條件查詢也就更快.同一思想,當我們采用子查詢的時候,讓某些子查詢排除掉更多的數據也會讓整體效率提高.

3)去重,去重本來是一個比較耗時的操作,但是如果某個集合是反復被使用的,那麼對這個集合進行去重處理也會帶來效率的提升.

 

經過優化後那個小程序在5分鐘內就執行完畢..可見sql語句的優化帶來的提升還是很可觀的..當然由於我這個小程序一開始就處理的不是太好,所以優化後提升很多,但是這也說明,如果注意sql語句的優化,在程序的處理時候就多加注意的話,一定程度上能避免不少性能問題..

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved