1. SQL管理過程中踩過的那些坑

        共 3461字,需瀏覽 7分鐘

         ·

        2021-04-13 22:35

        點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫(kù)開發(fā)”,

        設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨

        SQL專欄

        SQL基礎(chǔ)知識(shí)第二版
        SQL高級(jí)知識(shí)第二版

        作者:Woodytu

        https://www.cnblogs.com/woodytu/p/5280838.html


        1、SQL Server 最小存儲(chǔ)單元是什么?多大?再上一層存儲(chǔ)單元是什么?多大?
        答:
        頁(yè)或page,8kb大小,上一層是區(qū),一個(gè)區(qū)有8個(gè)頁(yè),共64k。

        2、堆表和非堆表的本質(zhì)區(qū)別?
        答:堆表沒有聚集索引,非堆表有,看具體情況,可以是聚集索引和非聚集索引。

        3、SQL Server有多少種索引?盡可能列出來。

        答:總的有聚集索引和非聚集索引,另外有覆蓋索引和過濾索引。

        聚集索引和非聚集索引都是B樹結(jié)果,區(qū)別是聚集索引的葉子節(jié)點(diǎn)保存的是表的聚集鍵,非聚集索引根據(jù)所在表的不同,如果在聚集表(表里已經(jīng)有一個(gè)聚集索引),則頁(yè)子節(jié)點(diǎn)保存的是指向聚集索引的聚集鍵,如果在堆表(沒有索引),則葉子節(jié)點(diǎn)保存的是RID(即文件號(hào):頁(yè)號(hào):槽號(hào))。

        覆蓋索引是非聚集索引的葉子節(jié)點(diǎn)也保存了要查詢的列,可以用來避免書簽查找。過濾索引包含條件的索引,這些索引只針對(duì)符合條件的數(shù)據(jù)進(jìn)行建立,可以針對(duì)命中這些條件的記錄提高查詢效率。


        4、SQL Server有多少個(gè)系統(tǒng)庫(kù)?
        答:4個(gè),mater,model,msdb,tempdb。
        其實(shí)還有兩個(gè)系統(tǒng)數(shù)據(jù)庫(kù),一個(gè)是Resource Database,另一個(gè)是distribution(建了復(fù)制才有)。

        5、如果一個(gè)報(bào)表存儲(chǔ)過程很慢,你的思路是什么?
        答:看下執(zhí)行計(jì)劃,看看是不是缺少索引,還是統(tǒng)計(jì)信息過期,還是具體的查詢語句問題。

        6、圖形化執(zhí)行計(jì)劃閱讀順序?
        答:從右到左,從下到上。

        7、怎么在SSMS中得知某個(gè)SQL語句的物理讀、邏輯讀次數(shù)?
        答:可以使用SET STATISTICS IO  ON。

        8、Profiler/SQL Trace和Extent Event相比,在過濾數(shù)據(jù)的行為上有什么不同?
        答:目前只了解過Profile,可以用它來跟蹤SQL語句,區(qū)別不知道。

        9、有下面一個(gè)表:
        CREATE TABLE T
        (ID INT IDENTITY(1,1),
        aqty INT,
        bqty INT)
        大致數(shù)據(jù)如下:
        1 1 2
        2 2 3
        3 2 1
        4 3 5
        ....
        假設(shè)數(shù)據(jù)有幾百萬,現(xiàn)在有個(gè)語句很慢:
        SELECT ID
        FROM T
        WHERE aqty>bqty
        列上已經(jīng)有索引,你能想到根本原因是什么?你會(huì)怎么優(yōu)化?
        答:表掃描。條件無法使用索引,只能一條條的判斷了。而且表掃描也不是最慢的,在有些場(chǎng)景下如果索引和查詢使用的不好會(huì)導(dǎo)致性能暴跌,甚至不如表掃描。

        10、你覺得為什么跨服務(wù)器多表關(guān)聯(lián)查詢時(shí)“可能”性能很差?你能想到哪些可以提升跨服務(wù)器查詢時(shí)性能低下的方法?
        答:可以參考下分布性查詢或分布性事務(wù)

        11、如何清空有外鍵的表的數(shù)據(jù)?
        答:可以嘗試取消外鍵約束,再用truncate后加會(huì)外鍵約束。

        12、LDF暴增怎么辦?你先查哪個(gè)DMV?
        答:可以先進(jìn)行一次完成備份,收縮下日志;空間允許的情況下,先修改日志文件大小,待收縮后,再還原為原來的大小。sys.dm_db_log_space_usage

        13、如果某個(gè)JOB的所有者是sa,能不能禁用sa?
        答:可以的,禁用sa并不會(huì)對(duì)JOB有什么影響,依然可以正常執(zhí)行。

        14、SSMS修改一個(gè)表的一列的數(shù)據(jù)類型 ,與用T-SQL實(shí)現(xiàn)ALTER TABLE 的底層實(shí)現(xiàn)區(qū)別在哪? 
        答:一般小表用SSMS可以修改成功,大表會(huì)提示超時(shí),只能用T-SQL語句來修改。

        15、UNION 和UNION ALL從性能上的區(qū)別是什么?
        答:UNION會(huì)去掉重復(fù)數(shù)據(jù),UNION ALL不會(huì)去掉重復(fù)數(shù)據(jù),UNION會(huì)消耗更多的資源去查找并去掉重復(fù)數(shù)據(jù)。
        如果確認(rèn)兩個(gè)查詢無重復(fù)記錄用UNION ALL更好些,不需要去重步驟

        16、初始安裝SQL Server 2008及其以上版本時(shí),SQL Server默認(rèn)是什么啟動(dòng)賬號(hào)?
        答:network service。

        17、不在域中的兩臺(tái)服務(wù)器做數(shù)據(jù)庫(kù)鏡像,與在域環(huán)境相比,必不可少的一個(gè)操作是什么?
        答:設(shè)置host文件。必需創(chuàng)建證書。這是鏡像在域或非域中最大的區(qū)別。

        18、事務(wù)復(fù)制對(duì)表最起碼有哪個(gè)硬性要求?
        答:表必須有主鍵

        19、你能不能猜到什么結(jié)果?為什么?
        DECLARE @demo VARCHAR
        SET @demo = '你猜猜會(huì)怎樣?'
        SELECT @demo
        答:沒有指定VARCHAR長(zhǎng)度會(huì)顯示空白,沒有指定varchar長(zhǎng)度,默認(rèn)是長(zhǎng)度1,并不是0。中文占兩個(gè)字節(jié)顯示,如果是下列語句:
        DECLARE @demo VARCHAR
        SET @demo = '123'
        SELECT @demo
        會(huì)顯示1。
        如果使用的是NVARCHAR則默認(rèn)長(zhǎng)度是2。

        20、怎么優(yōu)化這段代碼?
        USE AdventureWorks
        GO
        DECLARE @date DATE = '2013-09-30'
        SELECT SalesOrderID,
           SalesOrderDetailID,
           ModifiedDate
        FROM Sales.SalesOrderDetail
        WHERE CONVERT(VARCHAR(20), ModifiedDate, 23) = CONVERT(VARCHAR(20), @date, 23)
        答:不應(yīng)該在條件里使用表達(dá)式,應(yīng)該做如下修改:
        USE AdventureWorks
        GO
        DECLARE @date DATE = '2013-09-30'
        SELECT SalesOrderID,
           SalesOrderDetailID,
           ModifiedDate
        FROM Sales.SalesOrderDetail
        WHERE ModifiedDate = CONVERT(datetime,@date)


        21、十萬左右的數(shù)據(jù)要作為臨時(shí)數(shù)據(jù),你用臨時(shí)表還是表變量?大概說說理由。
        答:使用臨時(shí)表,臨時(shí)表上可以建立索引,可以使用統(tǒng)計(jì)信息來優(yōu)化。

        22、入職后大概工作:
        • 完成大概5~8份文檔,所以你需要有一定的文檔編寫水平。
        • 協(xié)助完成數(shù)據(jù)庫(kù)源代碼管控任務(wù)。
        • 逐步接手目前為止8臺(tái)服務(wù)器大概60個(gè)數(shù)據(jù)庫(kù),目前只用了事務(wù)復(fù)制
        • 常規(guī)管理包含但可能不僅限于:
        •     備份還原
              處理復(fù)制問題
              初中級(jí)T-SQL優(yōu)化
              數(shù)據(jù)庫(kù)日常監(jiān)控
        • 一年之內(nèi)逐步讀完這些書
                《SQL Server 2008技術(shù)內(nèi)幕:T-SQL語言基礎(chǔ)》
                《SQL Server 2008技術(shù)內(nèi)幕:T-SQL查詢》
                《SQL Server 2008企業(yè)級(jí)平臺(tái)管理實(shí)踐》
                《SQL Server 2008管理員必備指南》
                《SQL Server 2008查詢性能優(yōu)化》

        最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識(shí)第二版》《SQL高級(jí)知識(shí)第二版》的PDF電子版。里面有各個(gè)語法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來實(shí)操。


        有需要的讀者可以下載學(xué)習(xí),在下面的公眾號(hào)「數(shù)據(jù)前線」(非本號(hào))后臺(tái)回復(fù)關(guān)鍵字:SQL,就行

        數(shù)據(jù)前線


        后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

        后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群

        記得幫忙點(diǎn)「」和「在看」↓

        謝謝啦

        瀏覽 54
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 国产欧美日韩视频在线观看 | 奇米网91 | 免费看无码一级A片在线播放男男 | 一级操腷| 天天操夜夜操夜夜爽爽 |