Time of Update: 2017-01-19
一、什麼是索引 減少磁碟I/O和邏輯讀次數的最佳方法之一就是使用【索引】 索引允許SQL Server在表中尋找資料而不需要掃描整個表。 1.1、索引的好處: 當表沒有叢集索引時,成為【堆或堆表】 【堆】是一堆未加工的資料,以行標識符作為指向儲存位置的指標。表資料沒有順序,也不能搜尋,除非逐行遍曆。這個過程稱為【掃描】。當存在叢集索引時,非叢集索引的指標由叢集索引所定義的值組成,所以叢集索引變得非常重要。
Time of Update: 2017-01-19
一般情況下會有幾種情況需要你把資料庫設為唯讀: 1. Insert,Update,Delete 觸發器 2. Check 約束 和 Delete 觸發器 3. 設定資料庫為唯讀 4. 把表放到唯讀檔案組中 5. 拒絕對象層級許可權 6. 建立視圖 在開始之前,先建立一個資料庫及表作為樣本: 複製代碼 代碼如下: create database MyDB create table tblEvents ( id int, logEvent varchar(1000) ) insert into
Time of Update: 2017-01-19
CONVERT的使用方法: 格式: CONVERT(data_type,expression[,style]) 說明: 此樣式一般在時間類型(datetime,smalldatetime)與字串類型(nchar,nvarchar,char,varchar) 相互轉換的時候才用到. 例子: SELECT CONVERT(varchar(30),getdate(),101) now 結果為 now --------------------------------------- 09/15/2001
Time of Update: 2017-01-19
1.1.1 摘要 在開發過程中,我們不時會遇到系統效能瓶頸問題,而引起這一問題原因可以很多,有可能是代碼不夠高效、有可能是硬體或網路問題,也有可能是資料庫設計的問題。本篇博文將針對一些常用的資料庫效能調休方法進行介紹,而且,為了編寫高效的SQL代碼,我們需要掌握一些基本代碼最佳化的技巧,所以,我們將從一些基本最佳化技巧進行介紹。本文目錄代碼中的問題 資料庫效能開銷使用預存程序 使用資料庫事務 使用SqlBulkCopy 使用表參數 1.1.2 本文
Time of Update: 2017-01-19
自動更新統計資訊的基本演算法是: · 如果表格是在 tempdb 資料庫表的基數是小於 6,自動更新到表的每個六個修改。 · 如果表的基數是大於 6,但小於或等於 500,更新狀態每 500 的修改。 · 如果基數大於 500,表為更新統計資料時(500 + 20%的表)發生了更改。 · 表變數為基數的更改不會觸發自動更新統計資訊。 注意:此嚴格意義上講,SQL Server 計算基數為表中的行數。 注意:除了基數,該謂語的選擇性也會影響 AutoStats
Time of Update: 2017-01-19
通過《SQL Server Database Backup和還原認識和總結(一)》,相信您對資料備份和還原有了一個更深入的認識,在上文中我沒有對交易記錄做剖析,在此推薦宋沄劍的文章,對交易記錄做了比較詳細的講解:http://www.jb51.net/article/31038.htm。本文將針對上文繼續進行資料備份和還原講解,主要講解備份與還原的一些關鍵選項。 Database Backup選項
Time of Update: 2017-01-19
可能許多同學對SQL Server的備份與還原有一些瞭解,也可能經常使用備份與還原功能,我相信除DBA之外我們大部分開發員隊伍對備份與還原只使用最基礎的功能,對它也只有一個大概的認識,如果對它有更深入的認識,瞭解它更全面的功能豈不是更好,到用時會得心應手。因為經常有中小型客戶公司管理員對資料庫不瞭解或掌握不牢,會請我們技術人員出馬找回丟失的資料或硬體損壞移動資料的現象,或其它情況的發生。 首先從資料庫【復原模式】說起,因為資料庫如果復原模式設定不正確,會導致資料無法還原。 SQL Server
Time of Update: 2017-01-19
1. 次序函數與PARTITION BY 複製代碼 代碼如下: --所有資料 SELECT * FROM dbo.student AS a INNER JOIN dbo.ScoreTB AS b ON a.Id = b.stuid WHERE scorename = '語文' ------------------------------------------- --ROW_NUMBER() 的使用 產生列從1開始依次增加 ------------------------------------
Time of Update: 2017-01-19
1. TVP, 表變數,暫存資料表,CTE 的區別 TVP和暫存資料表都是可以索引的,總是存在tempdb中,會增加系統資料庫開銷,而表變數和CTE只有在記憶體溢出時才會被寫入tempdb中。對於資料量大,並且反覆使用,反覆進行查詢關聯的,建議使用暫存資料表或TVP,資料量小,使用表變數或CTE比較合適 2. sql_variant 萬能類型 可以存放所有資料類型,相當於C#中的object資料類型 3. datetime, datetime2, datetimeoffset datetime
Time of Update: 2017-01-19
總結常用基本點如下: 1、觸發器有兩種類型:資料定義語言 (Data Definition Language)觸發器(DDL觸發器)和資料操縱語言觸發器(DML觸發器)。 DDL觸發器:在使用者對資料庫執行資料定義(CREATE、ALTER、DROP或相似的語句)對資料庫結構進行修改時啟用而做出響應。 DML觸發器:在使用者對資料庫執行資料操作時發生,觸發器中的代碼會被自動調用。 2、DML觸發器分類:Insert觸發器、Delete觸發器、Update觸發器、上面任意類型混合。
Time of Update: 2017-01-19
其中 offset and fetch 最重要的新特性是 用來 分頁,既然要分析 分頁,就肯定要和之前的分頁方式來比較了,特別是 Row_Number() 了,在比較過程中,發現了蠻多,不過最重要的,通過比較本質,得出了優劣,也和大家一起分享下。 準備工作,建立測試表:Article_Detail,主要是用來存放一些文章資訊,測試的時間,都是從網易上面轉載的新聞,同時,測試表資料欄位類型是比較均勻的,為了更好的測試,表結構如下圖: 內容:資料量:129,991 條記錄 文法分析 1
Time of Update: 2017-01-19
一. 建庫,建表,加約束. 1.1建庫 複製代碼 代碼如下: use master go if exists (select * from sysdatabases where name='MyDatabase')—判斷master資料庫sysdatagbases表中是否存在將要建立的資料庫名 drop database MyDatabase—如果sysdatabases表中存在該資料庫名,則將它刪除 go exec xp_cmdshell ‘md
Time of Update: 2017-01-19
在本文中,我將說明如何用SQL Server的工具來最佳化資料庫索引的使用,本文還涉及到有關索引的一般性知識。 關於索引的常識 影響到資料庫效能的最大因素就是索引。由於該問題的複雜性,我只可能簡單的談談這個問題,不過關於這方面的問題,目前有好幾本不錯的書籍可供你參閱。我在這裡只討論兩種SQL
Time of Update: 2017-01-19
鑒於人手嚴重不足(當時算兩個半人的資源),打消了逐個庫手動去改的念頭。當前的程式結構不允許搞革命的做法,只能搞搞改良,所以準備搞個自動化工具去處理。原型剛開發完,開會的時候以拿出來就遭到營運DBA團隊強烈抵制,具體原因不詳。最後無限延期。這裡把思路分享下。歡迎拍磚。
Time of Update: 2017-01-19
代碼如下: EXEC sp_rename '表名.[原列名]', '新列名', 'column' Transact-SQL 參考 sp_rename 更改當前資料庫中使用者建立對象(如表、列或使用者定義資料類型)的名稱。 文法 sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ] 參數 [@objname =] 'object_name'
Time of Update: 2017-01-19
核心匯出作業的 代碼 和 作業備份是相似的 複製代碼 代碼如下: alter PROC DumpJob (@job VARCHAR(100)) AS DECLARE @retrun NVARCHAR(max) DECLARE @jobname VARCHAR(30),@category_calss_i INT ,@category_calss VARCHAR(50),@category_name VARCHAR(50) ,@category_type VARCHAR(30),@category_
Time of Update: 2017-01-19
作業備份,不是備份資料庫,是備份作業。 我的方法是把作業匯出成檔案備份起來,因為當你伺服器維護的多了的時候很多你的作業 就很成問題,很麻煩。 最好能夠作業實現同步,這個也是第一步,儲存成檔案,之後個人設想使用powershell 來把作業同步起來 複製代碼 代碼如下: DECLARE @jobname VARCHAR(30),@category_calss_i INT ,@category_calss VARCHAR(50),@category_name VARCHAR(50)
Time of Update: 2017-01-19
1、查詢SQL中的所有表: Select TABLE_NAME FROM 資料庫名稱.INFORMATION_SCHEMA.TABLES Where TABLE_TYPE='BASE TABLE' 執行之後,就可以看到資料庫中所有屬於自己建的表的名稱 2、查詢SQL中所有表及列: Select dbo.sysobjects.name as Table_name, dbo.syscolumns.name AS Column_name FROM dbo.syscolumns INNER JOIN
Time of Update: 2017-01-19
今天在做sql Server 2005的實驗的時候碰到的問題,問題描述很清楚,懷疑是我以前給電腦修改了名稱而導致的.可以用select @@servername和select serverproperty ('servername')對照一下,兩個的結果是否一樣,不一樣就會出現問題,以下給出解決的SQL指令碼 複製代碼 代碼如下: if serverproperty('servername') <> @@servername begin declare @server
Time of Update: 2017-01-19
資料庫複寫: 簡單來說,資料庫複寫就是由兩台伺服器,主伺服器和備份伺服器,主伺服器修改後,備份伺服器自動修改。 複製的模式有兩種:推送模式和請求模式,推送模式是主伺服器修改後,自動發給備份伺服器,請求模式是,備份伺服器自動去請求,個人開始也比較重視去測試兩個模式的差別,但是測試發現,其實兩個模式差別不是很大,在當今的伺服器配置中,沒必要考慮這麼多,雖然會有一些差別,但是可在可以忽略的範圍之內,建議直接選擇推送模式,因為配置起來相對簡單