從去年4月到如今的開博以來,我寫了很多關於MS SQL的文章,感受本身對MS SQL愈來愈瞭解,今天下午在一個SQL Server的技術羣文檔看到了一個文檔,是黃釗吉上傳的,我對他的印象,總以爲他是MS SQL的大牛,不論是從他的博客,仍是出版的《 數據庫技術叢書:SQL Server性能優化與管理的藝術》。前段時間看他在羣裏招人,是以師帶徒的形式,估計是升職,或者本身要請假一段時間,找個靠譜的助手。看了下本身對MS SQL的瞭解,仍是以爲不能太勝任。這事也就隨着羣裏聊天記錄的不斷刷屏慢慢淡忘了。今天在羣裏翻看了下羣文件,發現了"我踩過的聽過的那些坑.txt"文檔,我看了下,對本身蠻有啓發的。html
所以,我打算寫篇文章來回答他在文檔裏提的一些問題,我以爲,這些問題對於想從事DBA工做的都有必定的借鑑意義,本人水平有限,若是回答不正確,歡迎各位留言幫我一塊兒修正,謝謝你們!sql
1 CREATE TABLE T(ID Int identity(1,1),aqty int,bqty int)
大體數據以下:數據庫
1 1 21 SELECT ID 2 FROM T 3 WHERE aqty>bqty
列上已經有索引,你能想到root cause是什麼?你會怎麼優化?性能優化
答:表掃描。(感謝韓慶剛完善。)1 DECLARE @demo VARCHAR
2 SET @demo = '你猜猜會怎樣?'
3 SELECT @demo
答:沒有指定VARCHAR長度會顯示空白,在SSMS裏運行的真的是空白。(感謝FunLove回答)
補充:你沒有指定varchar長度,默認是長度1,中文佔兩個字節,顯示?或者亂碼,若是是下列語句:服務器
1 DECLARE @demo VARCHAR
2 SET @demo = '123'
3 select @demo
會顯示1。(感謝FunLove回答)
補充:由於DECLARE @demo VARCHAR沒有定義長度,並且存中文更建議用NVARCHAR。(感謝韓慶剛完善)運維
1 USE AdventureWorks2014 --AdventureWorks都可不必定是2014
2 GO
3 DECLARE @date DATE = '2013-09-30'
4 SELECT SalesOrderID, 5 SalesOrderDetailID, 6 ModifiedDate 7 FROM Sales.SalesOrderDetail 8 WHERE CONVERT(VARCHAR(20), ModifiedDate, 23) = CONVERT(VARCHAR(20), @date, 23)
答:不該該在條件裏使用表達式,應該作以下修改:ide
1 USE AdventureWorks2012 --AdventureWorks都可不必定是2014
2 GO
3 DECLARE @date DATE = '2013-09-30'
4 SELECT SalesOrderID, 5 SalesOrderDetailID, 6 ModifiedDate 7 FROM Sales.SalesOrderDetail 8 WHERE ModifiedDate = CONVERT(datetime,@date)
《Training Kit (Exam 70-461)》和《Training Kit (Exam 70-462)》須要的童鞋能夠站內短信聯繫(發現本身能夠用微雲分享,現已經加上連接),因爲文件太大,不能上傳到博客園文件,我會發到你郵箱。sqlserver
對於上述加粗的問題,你們若有更好的回答,歡迎幫我一塊兒修正。性能
讓咱們一塊兒繼續前行! 測試