sql數據庫優化

sql數據庫優化非常重要,如果sql數據庫優化的不好,不僅會增加客戶端和服務器端程序的編程和維護的難度,而且還會影響系統實際運行的性能。
那我們可以從哪些方面來進行sql數據庫優化呢?
sql數據庫優化之一:就是合理的數據庫的設計。
當前我們使用最多的就是關係型數據庫,關係數據庫設計是對數據進行組織化和結構化的過程,核心問題是關係模型的設計。對於數據庫規模較小的情況,我們可以比較輕鬆的處理數據庫中的表結構。然而,隨着項目規模的不斷增長,相應的數據庫也變得更加複雜,關係模型表結構更爲龐雜,這時我們往往會發現我們寫出來的SQL語句的是很笨拙並且效率低下的。更糟糕的是,由於表結構定義的不合理,會導致在更新數據時造成數據的不完整。因此數據庫的規範化流程尤爲重要,它可以以指導我們更好的設計數據庫的表結構,減少冗餘的數據,藉此可以提高數據庫的存儲效率,數據完整性和可擴展性。
那怎麼纔算是規範化的設計流程:規範化設計的過程就是按不同的範式,將一個二維表不斷地分解成多個二維表並建立表之間的關聯,最終達到一個表只描述一個實體或者實體間的一種聯繫的目標。目前遵循的主要範式包括1 NF、 2 NF、3 NF、BCNF、4NF和 5NF等幾種;在工程中3NF、BCNF應用得最廣泛,推薦採用 3 NF作爲標準。規範化設計的優點包括可有效地消除數據冗餘,理順數據的從屬關係,保持數據庫的完整性,增強數據庫的穩定性、伸縮性、適應性。通常認爲規範化設計存在的主要問題是增加了查詢時的連接庫表運算,導致計算機時間、空間、系統及運行效率的損失。在大多數情況下,這一問題可通過良好的索引設計等方法得到解決。數據庫設計中關鍵的步驟就是要確保數據正確地分佈到數據庫的表中。
比如說,一個客戶的地址信息不應該被存儲在不同的表中,因爲這裏的客戶地址是僱員的一個屬性。如果存在過多的冗餘數據,這就意味着要佔用了更多的物理空間,同時也對數據的維護和一致性檢查帶來了問題,當這個客戶的地址發生變化時,冗餘數據會導致對多個表的更新動作,如果有一個表不幸被忽略了,那麼就可能導致數據的不一致性。
sql數據庫優化之二:查詢的優化
如何讓你寫的SQL語句跑的更快呢?影響我們代碼速度的都有哪些可能性呢?不恰當的索引設計、不充份的連接條件和不可優化的where子句都有可能造成速度的下降。
首先來看看索引的建立。軟的sql server供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引),聚集索引簡單理解就是數據的實際的存放位置:如我們的漢語字典正文本身就是一個聚集索引,當我們知道要查的字拼音首字母爲A時,迅速縮小查詢範圍,翻到前幾頁就可以很快找到了,避免全表掃描,當然這種索引對於一個表只能有一個,因爲只能按照一種方法進行排序存放,所以一定得選擇最合適的聚集索引規則。非聚集索引,簡單來說就是目錄,比如字典中的偏旁部首目錄,當我們要查找數據的時候我們先通過目錄縮寫範圍,再進行查詢目標的確認。下表我們可以作爲參考建立適合的索引
描述
聚集索引
非聚集索引
列經常被分組排序
返回某時間範圍內的數據
不應
小數目的不同值
不應
極少不同值
不應
不應
頻繁更新的列
不應
頻繁修改索引列
不應
索引有助於提高檢索性能,但過多或不當的索引也會導致系統低效。因爲用戶在表中每加進一個索引,數據庫就要做更多的工作。過多的索引甚至會導致索引碎片。所以合適的索引才能使數據庫得到性能的提高。
再者就是連接條件:其實在多表鏈接操作被實際執行前,查詢優化器會根據連接條件,列出幾組可能的連接方案並從中找出系統開銷最小的最佳方案。連接條件要充份考慮帶有索引的表、數據記錄數多的表;
可以打開執行計劃,看具體的執行情況,哪些環節的資源的佔用大,是否可以優化查詢或者優化結構。另外:動態管理視圖(DMV)和動態管理函數(DMF)返回的服務器狀態信息可用於監控服務器實例的運行狀況、診斷問題和優化性能。
如:查找哪些批處理/請求生成的I/O最多、查詢以查看 CPU、計劃程序內存和緩衝池信息、CPU 平均佔用率最高 SQL 語句等。涉及的視圖及函數如下:sys.dm_exec_sql_text、dm_exec_query_stats、dm_os_sys_info、dm_exec_cached_plans、dm_exec_query_plan、等
sql數據庫優化之三:就是where條件
我們建立了索引就不是就可以使查詢的速度達到最快,而是在查詢的時候要使用到索引,纔會優化我們的查詢速度。比例根據部門列建立了索引,但是我們在使用部門的查詢條件的時候用’%XXX%’,此種條件是使用不到索引的,如下like便可以‘XXX%’;UNION在進行錶鏈接後會篩選掉重複的記錄,而往往重複的基本上不存在,可以採用UNION ALL操作符替代UNION,因爲UNION ALL操作只是簡單的將兩個結果合併後就返回結果。等等
其實sql數據庫優化的地方還有很多,此處只是大致說明sql數據庫優化的方向。我們如何去找我們的速度的瓶頸,從哪些方面去優化我們的數據庫。
轉自說明:本文轉自百洋軟件研究實驗室
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章