亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

詳解SQL Server的簡單查詢語句

2024-08-31 01:04:23
字體:
來源:轉載
供稿:網友

前言

對于一些原理性文章園中已有大量的文章尤其是關于索引這一塊,我也是花費大量時間去學習,對于了解索引原理對于后續理解查詢計劃和性能調優有很大的幫助,而我們只是一些內容進行概括和總結,這一節我們開始正式步入學習SQL中簡單的查詢語句,簡短的內容,深入的理解。

簡單查詢語句

所有復雜的語句都是由簡單的語句組成基本都是由SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY等組成,當然還包括一些謂詞等等。比如當我們要查詢某表中所有數據時我們會像如下進行。

SELECT * FROM TABLE

到這里是不是查詢就是從SELECT開始呢?我們應該從實際生活舉例,如我們需要到菜市場買菜,我們想買芹菜,我們應該是到有芹菜的攤位上去買,也就是從哪里去買,到這里我們會發現上述查詢數據的順序應該是先FROM然后是SELECT。在SQL 2012基礎教程中列出子句是按照以下順序進行邏輯處理。

FROMWHEREGROUP BYHAVINGSELECTORDER BY

比如我們要查詢篩選客戶71下的訂單,我們會進行如下查詢。

SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numbers FROM Sales.OrdersWHERE custid = '71'GROUP BY empid, YEAR(orderdate)HAVING COUNT(*) > 1ORDER BY empid, orderyear

但是實際上按照我們上述所說的順序,其邏輯化的子句是這樣的。

FROM Sales.OrdersWHERE custid = 71GROUP BY empid, YEAR(orderdate)HAVING COUNT(*) > 1SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numberordersORDER BY empid, orderyear

對于博主的SQL系列并非會將SELECT、HAVING等語句單獨拿來講,針對的是有了一定基礎的人群,后續內容也是如此,所以到了這里我們算是將簡單查詢語句敘述完畢。但是我一直強調的是簡短的內容,深入的理解,所以接下來看看有些需要注意的地方。

我們看到過很多文章一直在講SQL性能問題,比如在查詢所有數據時要列出所有列而非SELECT *,所以在本系列中,我也會在適當的去講性能問題,比如本節要講的SELECT 1和SELECT *的性能問題。

SELECT 1和SELECT *性能探討

在數據庫中查看執行計劃時我們通常會點擊【顯示估計的執行計劃】快捷鍵是Ctrl+L,這里我們可以看到它已經表明顯示的只是估計的執行計劃,所以是不準確的,所以為了顯示實際的執行計劃,我們應該啟動【包括實際的執行計劃】,快捷鍵是Ctrl+M,這樣才能得到比較準確的執行計劃,如下

sqlserver,查詢語句

查詢方式一(整表查詢)

USE TSQL2012GOIF EXISTS(SELECT 1FROM Sales.Orders)SELECT 'SELECT 1'GOIF EXISTS(SELECT *FROM Sales.Orders)SELECT 'SELECT *'GO

此時查看執行計劃是相同的,如下:

sqlserver,查詢語句

查詢方式二(在索引列上條件查找)

我們對某一列創建索引

CREATE INDEX ix_shipnameON Sales.Orders(shipname)

接下來繼續查看其執行計劃。

sqlserver,查詢語句

此時顯示查詢計劃依然一樣。我們再來看看其他查詢方式。

查詢方式三(使用聚合函數)

USE TSQL2012GOIF (SELECT 1FROM Sales.OrdersWHERE shipname = 'Ship to 85-B') = 1SELECT 'SELECT 1'GOIF (SELECT COUNT(*)FROM Sales.OrdersWHERE shipname = 'Ship to 85-B') = 1SELECT 'SELECT *'GO

我們看到查詢計劃依然一樣。

sqlserver,查詢語句

查詢方式四(使用聚合函數Count在非索引列上查找)

USE TSQL2012GOIF (SELECT COUNT(1)FROM Sales.OrdersWHERE freight = '41.3400') = 1SELECT 'SELECT 1'GOIF (SELECT COUNT(*)FROM Sales.OrdersWHERE freight = '41.3400') = 1SELECT 'SELECT *'GO

我們看到執行計劃還是一樣。

sqlserver,查詢語句

查詢方式五(子查詢)

我們看看在子查詢中二者性能如何

USE TSQL2012SELECT custid, companyname FROM Sales.Customers AS CWHERE country = N'USA' ANDEXISTS (SELECT * FROM Sales.Orders AS O WHERE O.custid = C.custid)GOSELECT custid, companyname FROM Sales.Customers AS CWHERE country = N'USA' ANDEXISTS (SELECT 1 FROM Sales.Orders AS O WHERE O.custid = C.custid)

此時結果二者查看執行計劃還是一樣

sqlserver,查詢語句

查詢方式六(在視圖中查詢)

我們創建視圖繼續來比較SELECT 1和SELECT *的性能

USE TSQL2012GoCREATE VIEW SaleOdersViewASSELECT shipaddress,shipname,(SELECT unitprice FROM Sales.OrderDetails AS sod where sod.orderid = so.orderid) as tc3FROM Sales.Orders AS soGO

進行視圖查詢

USE TSQL2012SELECT 1 FROM dbo.SaleOdersViewgoSELECT * FROM dbo.SaleOdersViewgo

結果執行計劃如下:

sqlserver,查詢語句

此時我們通過上述圖發現利用視圖查詢時,SELECT *的性能是如此低下占有97%,而SELECT 1才3%,這是為何呢?不明白其中原因,希望有清楚其中原因的園友能夠留下你們的評論給出合理的解釋。

SELECT 所有列和SELECT *性能探討

一直以來所有教程都在講SELECT *性能比SELECT 所有列性能低,同時也給出了合理的理由,我也一直這樣認為,但是在查資料學習過程中,發現如下一段話。

I don't think there is any difference, as long as the SELECT 1/* is inside EXISTS, which really doesn't return any rows – it just returns boolean as soon as condition of the WHERE is checked.I'm quite sure that the SQL Server Query Optimizer is smart enough not to search for the unneeded meta data in the case of EXISTS.I agree that in all the other situations SELECT * shouldn't be used for the reasons Simon mentioned. Also, index usage wouldn't be optimal etc.For me EXISTS (SELECT * ..) is the only place where I allow myself to write SELECT * in production code ;)

最后一句表明SELECT *使用的唯一場景是在EXISTS中,看到這里顛覆我以往看的教程的想法,不太明確,真的是這樣嗎?

總結

通過以上對SELECT 1和SELECT *性能的探討,在視圖中利用SELECT *性能更加低下,同時也結合SELECT *盡量避免用,我是不是可以下結論我可以更傾向于用SELECT 1呢?第二點是看到上述所給的資料SELECT *在Exist中的性能是不是和一定SELECT 所有列一樣呢?這是我存在疑問的兩個問題,是不是我所疑問的兩個問題,沒有具體的答案,需要看應用場景呢?那應用場景又是在哪里?畢竟不是專業的DBA,同時對SQL也研究不深,所以希望看到此文的讀者,能給出精彩的回答,同時也讓我學習學習。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,同時也希望多多支持VeVb武林網


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频99| 日韩电影中文字幕在线| 97在线免费视频| 成人免费自拍视频| 国产视频精品自拍| 欧美激情精品久久久久久变态| 亚洲在线观看视频| 91网站在线免费观看| 亚洲精品小视频在线观看| 4438全国亚洲精品在线观看视频| 26uuu日韩精品一区二区| 黑人巨大精品欧美一区二区一视频| 成人性生交xxxxx网站| 亚洲成人av片在线观看| 亚洲社区在线观看| 亚洲成人网在线观看| 中文字幕国产亚洲2019| 久久精品国产亚洲精品| 久青草国产97香蕉在线视频| 精品国产区一区二区三区在线观看| 日韩av黄色在线观看| 久久99精品久久久久久琪琪| 亚洲电影成人av99爱色| 欧美日韩国产综合视频在线观看中文| 日韩高清电影好看的电视剧电影| 精品视频—区二区三区免费| 欧美一级在线亚洲天堂| 欧美精品一区三区| 久热99视频在线观看| 97碰碰碰免费色视频| 国产精品久久久久久av福利软件| 亚洲夜晚福利在线观看| 91香蕉嫩草神马影院在线观看| 亚洲大胆美女视频| 久热精品视频在线观看一区| 日韩成人在线视频观看| 欧美亚洲另类制服自拍| 久久精品视频99| 91久久久久久久久久久久久| 久久好看免费视频| 久久影视免费观看| 日韩av影院在线观看| 3344国产精品免费看| 国产精品美女免费看| 精品国产成人在线| 欧美国产精品人人做人人爱| 精品亚洲男同gayvideo网站| 欧美性猛交xxxx免费看久久久| 国产精品激情av电影在线观看| 欧美在线视频一二三| 正在播放国产一区| 亚洲毛片在线观看.| 狠狠色狠狠色综合日日五| 97精品久久久| 日韩在线观看免费高清完整版| 97香蕉超级碰碰久久免费软件| 色综合色综合久久综合频道88| 日韩免费观看网站| 最近2019中文字幕在线高清| 成人啪啪免费看| 欧美激情区在线播放| 久久福利网址导航| 一区二区三区精品99久久| 日韩欧美亚洲一二三区| 国外成人在线视频| 91精品在线国产| 欧美成人激情在线| 欧美一级视频一区二区| 日本亚洲欧洲色α| 欧美激情精品久久久久久大尺度| 亚洲国产中文字幕在线观看| 色吧影院999| 欧美一区二区三区艳史| 亚洲国产99精品国自产| 国产精品日韩久久久久| 国产精品美女www| 国产一区视频在线| 久久久久久亚洲精品中文字幕| 欧美大尺度激情区在线播放| 久久天天躁狠狠躁老女人| 亚洲欧洲一区二区三区久久| 亚洲欧美日韩精品久久| 欧美综合一区第一页| 国产精品亚洲аv天堂网| 亚洲欧美在线x视频| 国产suv精品一区二区三区88区| 超碰97人人做人人爱少妇| 国产成人福利视频| 在线午夜精品自拍| 中文字幕av一区二区三区谷原希美| 日韩激情视频在线| 狠狠色狠狠色综合日日五| 亚洲jizzjizz日本少妇| 亚洲国产精品女人久久久| 伊人伊成久久人综合网小说| 欧美激情喷水视频| 日韩久久精品成人| 91九色单男在线观看| 欧美精品久久一区二区| 亚洲综合最新在线| 在线观看不卡av| 国模精品系列视频| 中文字幕日韩欧美在线视频| 欧美日本中文字幕| 91精品在线国产| 美女视频久久黄| 韩国一区二区电影| 国产精品88a∨| 日韩欧美国产一区二区| 欧美精品在线第一页| 国产精品日韩专区| 国产福利视频一区二区| 国产一区深夜福利| 中文字幕综合在线| 最近2019中文字幕mv免费看| 久久精品国产99国产精品澳门| 日韩高清电影好看的电视剧电影| 中文字幕日韩专区| 92看片淫黄大片欧美看国产片| 91精品视频播放| 日韩欧美中文在线| 成人信息集中地欧美| 欧美有码在线观看| 精品国产精品三级精品av网址| 亚洲第一二三四五区| 亚洲一区二区免费在线| 欧美一级高清免费播放| 91精品国产自产在线老师啪| 日韩欧美精品免费在线| 5252色成人免费视频| 成人免费福利视频| 久久不射电影网| 夜色77av精品影院| 一本大道亚洲视频| 91美女高潮出水| 国产丝袜一区二区三区免费视频| 欧美日韩综合视频网址| 欧美激情中文网| 国产专区欧美专区| 欧美成人精品不卡视频在线观看| 成人久久18免费网站图片| 亚洲欧美日韩精品久久奇米色影视| 国产精品美女主播在线观看纯欲| 久久久亚洲福利精品午夜| 精品福利樱桃av导航| 精品五月天久久| 九九精品在线播放| 91亚洲一区精品| 国产婷婷色综合av蜜臀av| 97婷婷涩涩精品一区| 欧美日韩国产精品专区| 国产精品免费一区豆花| 欧美日韩国产综合视频在线观看中文| 欧美成aaa人片在线观看蜜臀| 国产精品高潮呻吟久久av无限| 欧美成人小视频| 日韩欧美精品免费在线| 97av在线视频免费播放| 国产伦精品一区二区三区精品视频| 日韩精品视频观看| 欧美夜福利tv在线| 久久久久久国产精品美女| 成人精品在线观看| 久久天天躁狠狠躁夜夜av|