久久机这里只有精品,国产69精品一区二区亚洲孕妇,91精品国产综合久久婷婷香蕉,午夜久久久久久电影

最新活動:電腦PC端+手機端+微網站+自適應網頁多模板選擇-建站388元起價!!!
當前位置:主頁 > 網站建設 > SQL Server 高性能寫入的一些經驗總結建站知識

SQL Server 高性能寫入的一些經驗總結建站知識

時間:2023-05-24 10:05:24 閱讀: 文章分類: 網站建設 作者: 建站小能手

導讀:1建站知識本篇博文將針對一些常用的數據庫性能調休方法進行介紹,而且,為了編寫高效的SQL代碼,我們需要掌握一些基本代網站seo優化高端網站建設。

網站seo優化高端網站建設1.1.1 摘要

在開發過程中,我們不時會遇到系統性能瓶頸問題,而引起這一問題原因可以很多,有可能是代碼不夠高效、有可能是硬件或網絡問題,也有可能是數據庫設計的問題。

本篇博文將針對一些常用的數據庫性能調休方法進行介紹,而且,為了編寫高效的SQL代碼,我們需要掌握一些基本代碼優化的技巧,所以,我們將從一些基本優化技巧進行介紹。

本文目錄代碼中的問題 數據庫性能開銷使用存儲過程 使用數據庫事務 使用SqlBulkCopy 使用表參數 1.1.2 正文

假設,我們要設計一個博客系統,其中包含一個用戶表(User),它用來存儲用戶的賬戶名、密碼、顯示名稱和注冊日期等信息。

由于時間的關系,我們已經把User表設計好了,它包括賬戶名、密碼(注意:這里沒有考慮隱私信息的加密存儲)、顯示名稱和注冊日期等,具體設計如下:

復制代碼 代碼如下:

-- ============================================= -- Author: JKhuang -- Create date: 7/8/2012 -- Description: A table stores the user information. -- ============================================= CREATE TABLE [dbo].[jk_users]( -- This is the reference to Users table, it is primary key. [ID] [bigint] IDENTITY(1,1) NOT NULL, [user_login] [varchar](60) NOT NULL, [user_pass] [varchar](64) NOT NULL, [user_nicename] [varchar](50) 網站seo優化培訓NOT NULL, [user_email] [varchar](100) NOT NULL, [user_url] [varchar](100) NOT NULL, -- This field get the default from function GETDATE(). [user_registered] [datetime] NOT NULL CONSTRAINT [DF_jk_users_user_registered] DEFAULT (getdate()), [user_activation_key] [varchar](60) NOT NULL, [user_status] [int] NOT NULL CONSTRAINT [DF_jk_users_user_status] DEFAULT ((0)), [display_name] [varchar](250) NOT NULL )

圖2 數據寫入Users表 為了使數據庫獲得更快的寫入速度,我們必須了解數據庫在進行寫入操作時的主要耗時。 數據庫性能開銷 連接時間 當我們執行conn.Open()時,首先,必須建立物理通道(例如套接字或命名管道),必須與服務器進行初次握手,必須分析連接字符串信息,必須由服務器對連接進行身份驗證,必須運行檢查以便在當前事務中登記,等等 這一系列操作可能需要一兩秒鐘時間,如果我們每次執行conn.Open()都有進行這一系列操作是很耗費時間的,為了使打開的連接成本最低,ADO.NET使用稱為連接池的優化方法。 連接池:減少新連接需要打開的次數,只要用戶在連接上調用 Open()方法,池進程就會檢查池中是否有可用的連接,如果某個池連接可用,那么將該連接返回給調用者,而不是創建新連接;應用程序在該連接上調用 Close()或Dispose() 時,池進程會將連接返回到活動連接池集中,而不是真正關閉連接,連接返回到池中之后,即可在下一個 Open 調用中重復使用。 解析器的開銷 當我們向SQL Server傳遞SQL語句INSERT INTO …時,它需要對SQL語句進行解析,由于SQL Server解析器執行速度很快,所以解析時間往往是可以忽略不計,但我們仍然可以通過使用存儲過程,而不是直SQL語句來減少解析器的開銷。 數據庫連接 為了提供ACID(事務的四個特性),SQL Server必須確保所有的數據庫更改是有序的。它是通過使用鎖來確保該數據庫插入、刪除或更新操作之間不會相互沖突(關于數據庫的鎖請參考這里)。 由于,大多數數據庫都是面向多用戶的環境,當我們對User表進行插入操作時,也許有成千上百的用戶也在對User表進行操作,所以說,SQL Server必須確保這些操作是有序進行的。 那么,當SQL Server正在做所有這些事情時,它會產生鎖,以確保用戶獲得有意義的結果。SQL Server保證每條語句執行時,數據庫是完全可預測的(例如:預測SQL執行方式)和管理鎖都需要耗費一定的時間。 約束處理 在插入數據時,每個約束(如:外鍵、默認值、SQL CHECK等)需要額外的時間來檢測數據是否符合約束;由于SQL Server為了保證每個插入、更新或刪除的記錄都符合約束條件,所以,我們需要考慮是否應該在數據量大的表中增加約束條件。 Varchar VARCHAR是數據庫常用的類型,但它也可能導致意想不到的性能開銷;每次我們存儲可變長度的列,那么SQL Server必須做更多的內存管理;字符串可以很容易地消耗數百字節的內存的,如果我們在一個VARCHAR列中設置索引,那么SQL Server執行B-樹搜索時,就需要進行O(字符串長度)次比較,然而,整數字段比較次數只受限于內存延遲和CPU頻率。 磁盤IO SQL Server最終會將數據寫入到磁盤中,首先,SQL Server把數據寫入到事務日志中,當執行備份時,事務日志會合并到永久的數據庫文件中;這一系列操作由后臺完成,它不會影響到數據查詢的速度,但每個事物都必須擁有屬于自己的磁盤空間,所以我們可以通過給事務日志和主數據文件分配獨立的磁盤空間減少IO開銷,當然,最好解決辦法是盡可能減少事務的數量。 正如大家所看到的,我們通過優化聯接時間、 解析器的開銷、 數據庫聯接、約束處理,、Varchar和磁盤IO等方法來優化數據庫,接下來,我們將對前面的例子進行進一步的優化。 使用存儲過程 前面例子中,我們把SQL代碼直接Hardcode在客戶端代碼中,那么,數據庫就需要使用解析器解析客戶端中SQL網站建設制作語句,所以我們可以改用使用存儲過程,從而,減少解析器的時間開銷;更重要的一點是,由于SQL是動態執行的,所以我們修改存儲過程中的SQL語句也無需重新編譯和發布程序。 User表中的字段user_registered設置了默認值(GETDATE()),那么我們通過消除表默認值約束來提高系統的性能,簡而言之,我們需要提供字段user_registerseo網站優化培訓ed的值。 接下來,讓我們省去User表中的默認值約束和增加存儲過程,具體代碼如下:

關鍵詞標簽: 標簽 SQL 高性能

聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-24 ,文章SQL Server 高性能寫入的一些經驗總結建站知識主要講述高性能,標簽,SQL網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/web_6718.html

我的IDC 網站建設技術SEOUC.COM
專注網站建設,SEO優化,小程序設計制作搭建開發定制網站等,數千家網站定制開發案例,網站推廣技術服務。
  • 5000+合作客服
  • 8年從業經驗
  • 150+覆蓋行業
  • 最新熱門源碼技術文章

    主站蜘蛛池模板: 江孜县| 资阳市| 长宁县| 洛阳市| 芒康县| 酒泉市| 金沙县| 大方县| 衢州市| 和顺县| 甘孜县| 宣城市| 仲巴县| 清丰县| 廊坊市| 海南省| 寿阳县| 霞浦县| 凯里市| 镇原县| 涡阳县| 陆河县| 库车县| 西盟| 黄骅市| 武川县| 芦溪县| 德安县| 沂水县| 江油市| 中江县| 咸宁市| 荣成市| 周宁县| 黄浦区| 安泽县| 工布江达县| 县级市| 连城县| 平遥县| 海南省|