小編以前在做asp及.net的時候經常用到sql server,現在用php雖然大多數時候用mysql,但不泛有些客戶要在原來sql的平台上公升級或相容開發,值得慶幸的是php無所不能,基本上所有的資料庫它都能連線並支援,本文主要向大家介紹的是正確優化sql server資料庫的經驗總結,其中包括在對其進行優化的實際操作中值得大家注意的地方描述,以及對sql語句進行優化的最基本原則,以下就是文章的主要內容描述。
優化資料庫的注意事項:
1、關鍵字段建立索引。
2、使用儲存過程,它使sql變得更加靈活和高效。
3、備份資料庫和清除垃圾資料。
4、sql語句語法的優化。(可以用sybase的sql expert,可惜我沒找到unexpired的序列號)
5、清理刪除日誌。
sql語句優化的基本原則:
1、使用索引來更快地遍歷表。
預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,資料在物理上隨機存放在資料頁上。合理的索引設計要建立在對各種查詢的分析和**上。
一般來說:
①.有大量重複值、且經常有範圍查詢(between, >,< ,>=,< =)和order by、group by發生的列,可考慮建立群集索引
②.經常同時訪問多列,且每列都含有重複值可考慮建立組合索引;
③.組合索引要盡量使關鍵查詢形成索引覆蓋,其前導列一定是使用最頻繁的列。
2、is null 與 is not null
不能用null作索引,任何包含null值的列都將不會被包含在索引中。即使索引有多列這樣的情況下,只要這些列中有一列含有null,該列就會從索引中排除。也就是說如果某列存在空值,即使對該列建索引也不會提高效能。任何在where子句中使用is null或is not null的語句優化器是不允許使用索引的。
3、in和exists
exists要遠比in的效率高。裡面關係到full table scan和range scan。幾乎將所有的in操作符子查詢改寫為使用exists的子查詢。
4、在海量查詢時盡量少用格式轉換。
5、當在sql server 2000中
如果儲存過程只有乙個引數,並且是output型別的,必須在呼叫這個儲存過程的時候給這個引數乙個初始的值,否則會出現呼叫錯誤。
6、order by和gropu by
使用order by和group by短語,任何一種索引都有助於select的效能提高。注意如果索引列裡面有null值,optimizer將無法優化。
7、任何對列的操作都將導致表掃瞄,它包括sql server資料庫函式、計算表示式等等,查詢時要盡可能將操作移至等號右邊。
8、in、or子句常會使用工作表,使索引失效。如果不產生大量重複值,可以考慮把子句拆開。拆開的子句中應該包含索引。
9、set showplan_all>10、謹慎使用游標
在某些必須使用游標的場合,可考慮將符合條件的資料行轉入臨時表中,再對臨時表定義游標進行操作,這樣可使效能得到明顯提高。
注釋:所謂的優化就是where子句利用了索引,不可優化即發生了表掃瞄或額外開銷。經驗顯示,sql server資料庫效能的最大改進得益於邏輯的資料庫設計、索引設計和查詢設計方面。反過來說,最大的效能問題常常是由其中這些相同方面中的不足引起的。
其實sql優化的實質就是在結果正確的前提下,用優化器可以識別的語句,充份利用索引,減少表掃瞄的i/o次數,盡量避免表搜尋的發生。其實sql的效能優化是乙個複雜的過程,上述這些只是在應用層次的一種體現,深入研究還會涉及sql server資料庫層的資源配置、網路層的流量控制以及作業系統層的總體設計。
SQL server 資料庫的資料完整性
資料庫中的資料是從外界輸入的,而資料的輸入由於種種原因,會發生輸入無效或 錯誤資訊。保證輸入的資料符合規定,成為了 資料庫系統,尤其是多使用者的 關係資料庫系統首要關注的問題。資料完整性因此而提出。本章將講述資料完整性的概念及其在sql server 中的實現方法。資料完整性 data integr...
MySQL資料庫SYS CPU高的可能性分析
我們在管理繁忙的 mysql 資料庫時,可能都有碰到 sys cpu 高的經歷 系統突然 sys cpu 高起來,甚至比 user cpu 高很多,這時系統 qps tps 急劇下降。sys cpu高是什麼造成的呢?主要有2種可能 1.context switch 不高,但在核心態 spin,導致 ...
高可用性資料庫方案DataGuard部署
dataguard是甲骨文推出的一種高可用性資料庫方案,是一種資料庫級別的ha方案,最主要功能是容災 資料保護 故障恢復等。1,伺服器資源 相同作業系統,硬體資源,安裝oracle 主伺服器 xx.xx.xx.70 備伺服器 xx.xx.xx.71 2,db unique name區分主備庫標識 d...