效能指南/資料庫和效能
| 此頁面需要母語人士的音訊片段。 如果你能夠並且願意貢獻,請 留言. |
除了建立 SQL 命令之外,我們還需要更多知識來最佳化資料庫應用程式的效能。更多關於我們的資料庫環境和軟體設計的資訊也很有幫助,就像一個在你身邊的好資料庫管理員一樣。
首先,我們嘗試在不改變應用程式和資料庫模式的情況下進行一些最佳化。否則,我們也希望資料庫的設計包含一些效能建議。
正確的驅動程式可以幫助我們。我們需要使用最新的直接資料庫驅動程式。我們可以快速獲取 ODBC,這通常是原型設計的不錯方法。ODBC 訪問會從資料庫語句和結果中進行一些轉換。這不可能很快或很猛烈。注意 - 依賴於程式語言的選擇,我們有一些不同的驅動程式(例如 JDBC 知道四種驅動程式型別)。
資料庫通常透過網路使用。為了處理傳入的語句,這些資料庫需要高效能的網路連結。如果許多使用者使用資料庫,請檢查負載均衡以使用資料庫叢集。
你也要知道網路的 MTU [最大傳輸單元] 是如何工作的。最佳化你的資料庫語句和結果以避免網路中的碎片化。這是資料庫和網路的效能。這可能是最後一步,如果其他任何方法都幫不了你。
選擇合適的表空間大小,還要記住撤銷和臨時表空間。你需要為你的表空間選擇合適的系統檔案。因此,我們不建議你使用日誌檔案系統。
表空間的劃分可以幫助你。如果知道資料庫中資料的相對分配,一些資料庫系統可以更快地返回結果。
改變查詢值的方式對資料庫來說很重要。透過合適的鍵,你的查詢可以獲得超過 100% 的效能提升。建立正確的索引也很重要。這些索引的空間不會太大。最好不要用時間來判斷我們是否擁有正確的鍵和索引。讓我們使用執行計劃...
執行計劃是檢查效能努力的好方法。這些通常以視覺化的形式顯示的統計資訊讓你看到:你的索引和鍵是否適合你的 SQL 語句?
通常我們需要排序的資料,我們可以簡單地將這些請求包含在我們的 SQL 中。但請注意 - 我們的 RAM 可能會很快被填滿,然後臨時表空間 / 硬碟驅動器就會開始使用。此時,表空間 的定義方式就變得很重要了。
很多時候我們不需要將所有結果返回給使用者。想想網際網路搜尋引擎 - 沒有人一次性發送所有大的結果。首先,使用者會從特殊規則中選擇的部分結果集獲得結果。小型化原則與後臺程序或執行緒結合在一起用於獲取後續結果片段,可以為我們的使用者帶來主觀的效能提升。想想 - 你訪問過多少個網際網路搜尋網站。
我們“普通”使用者希望我們的查詢結果非常快。但有些應用程式,比如資料倉庫或統計資料,並不需要直接的結果。當我們需要結果時,它只是一個很小的但重要的資訊來進行檢查。有時非同步離線查詢就足夠了。我們可以透過巧妙地延遲啟動這些查詢來停止不必要的壓力 - 有時是在晚上…
我們可以使用資料庫中儲存的 SQL 查詢 - 過程來更快地執行。在使用查詢過程之前,我們的資料庫會知道需要的資訊,並可以進行最佳化。
否則,我們也可以使用儲存過程。在這裡,應用程式會在通常使用之前將 SQL 語句提供給我們的資料庫。資料庫也可以同樣地為我們進行最佳化。
連線管理使用許多資源。檢查需要多少個數據庫連線。
重用資料庫連線是一種很好的方式,叫做連線池。我們可以節省很多資源 / 開銷,因為我們總是建立新的連線。
瞭解我們使用的資料庫 SQL 語句是如何利用的,這是一個好主意。但這依賴於具體的資料庫,因此我們最好將語句放到外部資源中。
Oracle
[edit | edit source]Oracle 資料庫從右到左解釋 where 子句。如果我們要連線大型表,應首先執行大型約束。因此,在 Oracle 資料庫中,應將較大的約束放在右側 - 例如
select * from Kunde K, Bestellung B
where Datum ‘1.1.2000’ and ’31.1.2000 23:59’ and Name= ‘Anton’
and K.kdkey = B.kdkey
Interbase
[edit | edit source]Interbase 從左到右解釋 where 子句。如果我們要連線大型表,應首先執行大型約束。因此,在 Oracle 資料庫中,應將較大的約束放在左側 - 例如
select * from Kunde K, join Bestellung B on K.kdkey=B.kdkey
where “Anton”
and Datum between “1.1.2000” and “31.1.2000 23:59”