程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server與Oracle數據庫在查詢優化上的差異(二)

SQL Server與Oracle數據庫在查詢優化上的差異(二)

編輯:關於SqlServer

四、在SQL語句上的查詢優化。

前台的應用程序要在數據庫服務器上起作用,最終靠的都是應用程序中的一條條SQL語句。據不完全統 計,SQL語句消耗了數據庫服務器80%左右的資源。所以,如何提高SQL語句的執行效率,是在數據庫查詢 優化中必須要考慮的一個問題。

但是,在實際工作中,許多程序員有個誤區,他們認為數據庫查詢優化不是他們的事情,而應該是數 據庫管理系統的任務,這是很多程序員的一個錯誤認識。他們錯誤地認為,他們所開發的應用程序的性能 ,跟他們所編寫的SQL語句關系不大。一個好的查詢語句往往可以使得應用程序的性能提高數十倍,而且 ,隨著記錄量的增加,這個效果還會以幾何級數上升。

另外,SQL語句是獨立於程序設計邏輯的,也就是說,無論你的業務邏輯是怎麼設計的,最後分解成 SQL語句,就是那麼幾個語法,所以,相對於應用程序源代碼的優化,SQL查詢語句的優化在時間與風險上 ,都要低許多。

對於SQL語句的優化,Oracle數據庫與SQL Server數據庫有類似的地方,也有一些差異。下面筆者就這 兩者的差異與共同點做一個綜合介紹。

1、 通過索引來提高SQL語句的執行效率。

一般來說,對於一些經常需要查詢的表,如產品信息表,我們可以通過建立外鍵來提高查詢效率。但 是,也不是說每個字段都要指定為外鍵。對於一些沒有指定外鍵的字段,我們可以為其建立索引,來提高 數據表的查詢效率。

一般情況,在以下幾種情況下,我們可以為表建立索引來提高SQL語句的執行效率。

一是對於一些經常需要查詢的表,我們出於某種考慮,沒有設置外鍵,而是通過設置索引來提高對於 表的查詢效率。在數據庫表中,外鍵的設置往往受到一些限制;而相對於外鍵來說,索引的限制則要小得 多。所以,在一些不使用外鍵的情況下,我們可以采用索引來提高對於表的查詢效率。

二是在需要頻繁進行排序或者分組的表上,建立索引,可以極大地提高查詢效率。如ERP系統在設計的 時候,可能需要頻繁地查詢采購訂單明細,而且,這份報表是需要根據采購訂單的號碼進行排序。如此的 話,在數據庫設計的時候,就可以把采購訂單的號碼設置為索引,在每次運行采購訂單明細作業的時候, 前台ERP程序的性能就會高許多。而有時候,可能需要按供應商來統計當天的進貨金額,此時,最好能夠 在進貨明細表中,給供應商字段添加索引,這對於提高當天進貨匯總表作業的運行效率,會有非常大的幫 助。總之,在分組查詢或者排序查詢的表上,設置索引對於提高應用程序的整體性能,具有不可忽視的作 用。

三是如果待排序的列有多個,則需要在這些列上建立復合索引。如前台應用程序在生成當天的進貨明 細表時,需要按供應商、采購訂單號、產品編號進行排序。此時,也就是說,在生成進貨明細表這份報表 時,要按這三個字段進行排序。遇到這種情況時,對這些字段建立復合索引,提高查詢效率,是一個不錯 的選擇。

以上這些SQL語句優化,Oracle數據庫與SQL Server數據庫都可以實現。雖然具體的實現語句可能稍有 區別,但都是換湯不換藥,沒有本質區別。

2、 把索引與數據文件存放在不同的磁盤中。

當索引或者數據庫文件比較龐大時,把他們放在同一個磁盤中會加大輸入輸出等競爭,從而抵消了索 引的作用。為了解決過多的索引導致輸入輸出效率降低的問題,在數據庫設計的時候,最好把索引跟用戶 的表空間建立在不同的磁盤中。如把數據庫的表空間建立在一塊硬盤中,而把索引建立在另外一塊硬盤中 。如此的話,就可以明顯地降低輸入輸出競爭。也就是說,這樣設計,隨著索引的增加,不會導致輸入輸 出效率的低下。

不過,根據筆者的了解,索引與數據文件存放在不同的磁盤中,現在好像只有Oracle 數據庫可以做到 ,而微軟的SQL Server數據庫則無法實現這一點。

這也許根他們的定位不同。甲骨文的數據庫系統是針對大型的數據庫應用而設計,所以,對於查詢的 效率要求更加高。

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