空手一方客

收獲了一種恬靜的生活, 像一條波瀾不驚的小河, 流過春夏 流過秋冬
個人資料
  • 博客訪問:
正文

暉聲暉色: 設計SQL的經驗

(2009-03-26 22:16:17) 下一個

    SQL那麽普遍,很多人都在用。暉聲暉色的經驗值得學習。
          謝謝他的無私奉獻讓大家分享


在應用係統開發初期,由於數據庫的數據比較少體現不出SQL語句各種寫法的性能優劣,但是如果將應用係統提交實際應用後,隨著數據庫數據的增加,係統的響應速度就成為需要解決的最重要的問題之一。係統優化中一個很重要的方麵就是SQL語句的優化。對於海量數據,劣質SQL語句和優質SQL語句之間的速度差別可以達到上百倍甚至更多,可見對於一個係統不是簡單地能實現其功能就可,而是要寫出高質量的SQL語句,提高係統的可用性。常見的編寫高質量的SQL語句的原則如下。

  • 不要在SQL語句中使用係統默認的保留關鍵字;
  • 盡量用EXISTS和NOT EXISTS代替IN和NOT IN;
  • 盡量不用SELECT * FROM ... 而要寫字段名SELECT field1,field2,...;
  • 在SQL查詢中盡量使用索引列來加快查詢速度;
  • ORDER BY語句決定了如何對返回的查詢結果進行排序。Order by語句對要排序的列沒有什麽特別的限製,也可以將函數加入列中。任何在Order by語句的非索引項或者有計算表達式都將降低查詢速度。重寫order by語句以使用索引,也可以為所使用的列建立另外一個索引,同時應絕對避免在order by子句中使用表達式;
  • 任何在where子句中使用is null或is not null的語句不允許使用索引,所以執行的效率較低;
     
  • 通配符(%)在搜尋詞首出現,係統不使用索引,如此使用會降低查詢速度。當通配符出現在字符串其他位置時,優化器就能利用索引;
  • 在海量數據的SQL查詢語句中盡量少用格式轉換;
  • 任何對列的操作都將導致表掃描,它包括數據庫函數、計算表達式等等,查詢時要盡可能將操作移至等號右邊;
  • IN、OR子句常會使用工作表,使索引失效。如果不產生大量重複值,可以考慮把子句拆開。拆開的子句中應該包含索引。
[ 打印 ]
閱讀 ()評論 (2)
評論
deedee2kcn 回複 悄悄話 我也在自學SQL, 這些Tips在 by Paul Wilton & John Colby 中都有提到. 這是一本很好的SQL的入門書, 寫得很好. 跟你分享一下.
多維倪用戶 回複 悄悄話 那位能幫我察看一下現在多維博克能上否?我懷疑在那裏被封了IP. 謝謝。

如果您能登陸多維博克,敬請剪貼我的這一信息到那裏的魚翔淺底博克的寓言《河狸》一文之後。
登錄後才可評論.