使用sql的一些tip

來源:互聯網
上載者:User
哈爾濱工業大學電腦學院資料庫研究中心 zhaokai@hit.edu.cn如何在SQL Server 2000中顯示查詢計劃。 使用 SQL 查詢分析器以文本方式顯示執行計畫SHOWPLAN_TEXT and SHOWPLAN_ALLThe two SET options SHOWPLAN_TEXT and SHOWPLAN_ALL let you see the estimated query plan without actually executing the query. Both options also automatically enable the SET NOEXEC option, so you don't see any results from your query—you see only the way that SQL Server has determined is the best method for processing the query. Turning NOEXEC ON can be a good thing while tuning a query. For example, if you have a query that takes 20 minutes to execute, you might try to create an index that will allow it to run faster. However, immediately after creating a new index, you might just want to know whether the query optimizer will even choose to use that index. If you were actually executing the query every time you looked at its plan, it would take you 20 minutes for every tuning attempt. Setting NOEXEC ON along with the show plan option will allow you to see the plan without actually executing all the statements. WARNING Since turning on SHOWPLAN_TEXT or SHOWPLAN_ALL implies that NOEXEC is also on, you must set the SHOWPLAN option to OFF before you do anything else. For example, you must set SHOWPLAN_TEXT to OFF before setting SHOWPLAN_ALL to ON. 使用 SQL 查詢分析器以圖形方式顯示執行計畫 如何使用DBCC PAGE命令來查看資料頁格式例子:use testgoselect * from stugo結果: 首先來看sysindexes關係的內容。資料庫中的每個索引和表在表中各佔一行。該表格儲存體在每個資料庫中。列名資料類型描述IdInt表 ID(如果 indid = 0 或 255)。否則為索引所屬表的 ID。StatusInt內部系統狀態資訊。Firstbinary(6)指向第一頁或根頁的指標。IndidSmallint索引 ID: 0 = 該表為新表,對應的表是一個堆1 = 叢集索引>1 = 非聚集255 = 具有 text 或 image 資料的表條目rootbinary(6)如果 indid >= 1 和 1 重複。如果 indid = 255,rows 設定為 0。提供該列是為了向後相容。select id ,first,indid from sysindexes where id =object_id('stu') and indid in (0,1)DBCC的格式為:DBCC PAGE ({dbid | dbname},filenum,pagenum[,printopt])為了獲得filenum,filenum,執行下面的語句: select id ,first,indid from sysindexes where id =object_id('stu') and indid in (0,1)id first indid4535766540x1900000001000然後運行 DBCC dbcc traceon (3604)godbcc page('test',1,25,1)goDBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。PAGE: (1:25)------------BUFFER:-------BUF @0x18ED5A00---------------bpage = 0x19620000 bhash = 0x00000000 bpageno = (1:25)bdbid = 7 breferences = 24 bstat = 0x9bspin = 0 bnext = 0x00000000 PAGE HEADER:------------Page @0x19620000----------------m_pageId = (1:25) m_headerVersion = 1 m_type = 1m_typeFlagBits = 0x0 m_level = 0 m_flagBits = 0x8008m_objId = 453576654 m_indexId = 0 m_prevPage = (0:0)m_nextPage = (0:0) pminlen = 8 m_slotCnt = 8m_freeCnt = 7938 m_freeData = 1316 m_reservedCnt = 0m_lsn = (6:166:2) m_xactReserved = 0 m_xdesId = (0:0)m_ghostRecCnt = 0 m_tornBits = 2 Allocation Status-----------------GAM (1:2) = ALLOCATED SGAM (1:3) = NOT ALLOCATEDPFS (1:1) = 0x61 MIXED_EXT ALLOCATED 50_PCT_FULL DIFF (1:6) = CHANGEDML (1:7) = NOT MIN_LOGGED DATA:-----Slot 0, Offset 0x60-------------------Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 19620060: 00080030 0000000c 01000002 7a001300 0..............z19620070: 6f6168 haoSlot 1, Offset 0x73-------------------Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 19620073: 00080030 00000002 01000002 6b001200 0..............k19620083: 6961 aiSlot 2, Offset 0x85-------------------Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 19620085: 00080030 0000002d 01000002 77001300 0...-..........w19620095: 676e61 angSlot 3, Offset 0x98-------------------Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 19620098: 00080030 0000000f 01000002 66001300 0..............f196200a8: 676e65 engSlot 4, Offset 0xab-------------------Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 196200ab: 00080030 0000004c 01000002 78001100 0...L..........x196200bb: 78 x Slot 5, Offset 0xbc-------------------Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 196200bc: 00080030 0000005a 01000002 79001100 0...Z..........y196200cc: 79 y Slot 6, Offset 0xcd-------------------Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP 196200cd: 00080010 000000c8 020002 ...........Slot 7, Offset 0x50e--------------------Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 1962050e: 00080030 000004d2 01000002 7a001600 0..............z1962051e: 6b6f6168 6961 haokaiOFFSET TABLE:-------------Row - Offset 7 (0x7) - 1294 (0x50e) 6 (0x6) - 205 (0xcd) 5 (0x5) - 188 (0xbc) 4 (0x4) - 171 (0xab) 3 (0x3) - 152 (0x98) 2 (0x2) - 133 (0x85) 1 (0x1) - 115 (0x73) 0 (0x0) - 96 (0x60) DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。 分析:資料行的格式19620060: 00080030 0000000c 01000002 7a001300 0..............z19620070: 6f6168 haoid = 12 name = zhao 30 00 0800 0c000000 0200 00 0100 1300 7a68616f300008000c000000020000010013007a68616f狀態位未使用找到第一 列的位置第八個位元組開始定長第一列的值為 c=12總列數為2Null標誌均可以為非空變長列數為1列第一個變長結束的位置在0x13=19結束第一個變長列zhao OBJECT_ID返回資料庫物件標識號。文法OBJECT_ID ( 'object' )參數'object'要使用的對象。object 的資料類型為 char 或 nchar。如果 object 的資料類型是 char,那麼隱性將其轉換成 nchar。傳回型別int DBCC EXTENTINFO利用DBCC EXTENTINFO得到屬於一個對象的所有盤區的列表。其文法為:DBCC EXTENTINFO(dbname,tablename,indexid) sql 會把叢集索引的資料頁用鏈表串連起來,但對於堆不需要。例如有 以及 其資料行如下(選例):19918060: 00080030 0a0a0001 01000004 4e002b00 0............+.N19918070: 48207765 20657269 6f4a202d 6f6e2062 ew Hire - Job no19918080: 70732074 66696365 646569 t specifiedjob_id = 1 job_desc = New Hire - Job not specifiedmin_lvl = 10 max_lvl = 10 00080030 0a0a0001 01000004 4e002b00 48207765 20657269 6f4a202d 6f6e2062 70732074 66696365 6465693000080001000a列數開始的位置Small int 第一列資料Tiny int第三列資料0a04000001002bTiny int第四列資料列數為4均可空變長列數為1第一個變長列結束的位置剩下的為字串 REPLICATE以指定的次數重複字元運算式。文法REPLICATE ( character_expression , integer_expression ) 參數character_expression由字元資料組成的字母數字運算式。character_expression 可以是常量或變數,也可以是字元列或位元據列。integer_expression是正整數。如果 integer_expression 為負,則返回Null 字元串。傳回型別varcharcharacter_expression 必須為可隱性轉換為 varchar 的資料類型。否則,使用 CAST 函數顯式轉換 character_expression。For example:replicate(cast(1 as varchar(1)),250) or replicate(‘1’,250) and they are the same. 如果是cast(1 as char)則,類型轉化後的1所佔的空間為32個位元組如果是cast(1 as varchar(1)),則1所佔的空間為1個位元組。 Primary key unique在SQL中primary key 和unique的處理是一樣的。系統會自動在primary key 和unique所約束的列上建立叢集索引。查詢最佳化工具基於位於索引的存在而不是基於一個烈被聲明為主碼的事實來作出決策。例如: 在建立it表後,系統自動為it建立叢集索引,同時上圖表明了sysobjects,syscolumns和sysindexes的關係。待插入兩行後,結果如下: 當我們插入Insert into it values(3,null)分析檔案格式1990408d: 00080010 00000003 020002 ...........id = 3 name = [NULL] 10 00 0800 03000000 0200 021000080003000000020002第一列資料在第八個位元組處一個列資料為3共有兩列Null = 10 第二列為空白,結束 建立索引是如不指名是clustered或nonclustered,則系統預設為非簇集的,即indid > 1 syslogins中保留了所有登陸使用者的資訊 sp_dboption顯示或更改資料庫選項。不能在 master 或 tempdb 資料庫上使用 sp_dboption。向後相容性支援 sp_dboption。使用 ALTER DATABASE 設定資料庫選項。文法sp_dboption [ [ @dbname = ] 'database' ] [ , [ @optname = ] 'option_name' ] [ , [ @optvalue = ] 'value' ]參數[@dbname =] 'database'在其中設定指定選項的資料庫的名稱。database 的資料類型為 sysname,預設值為 NULL。[@optname =] 'option_name'要設定的選項的名稱。沒有必要輸入完整的選項名稱。Microsoft? SQL Server? 可識別名稱中任何專屬的部分。如果選項名稱包含空格或者關鍵字,請將選項名稱用引號引起來。如果省略此參數,sp_dboption 將列出處於開啟狀態的選項。option_name 的資料類型為 varchar(35),預設值為 NULL。 [@value =] 'value'option_name 的新設定。如果省略此參數,sp_dboption 將返回當前設定。value 可以是 true、false、on 或 off。value 的資料類型為 varchar(10),預設值為 NULL。傳回碼值0(成功)或 1(失敗) 可以用sp_dboption 來設定批量insertselect into/bulkcopy當為 true 時,允許使用 SELECT INTO 語句和快速大量複製。 累積求和問題-T-SQL系列累積求和問題 有一表: col1 value running_tot 1 10 0 (10) 2 15 0 (25) 3 50 0 (75)若要將value列累積求和的結果放到running_tot 列,可以這樣:declare @i intset @i=0update tableset @i=running_tot=@i+value或者declare @i intset @i=0update tableset @i=running=@i+valuesfrom table

相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。