前言
本節我們再來穿插講講索引知識,后續再講數據類型中的日期類型,簡短的內容,深入的理解。
強制索引查詢條件
前面我們也講了一點強制索引查詢的知識,本節我們再來完整的講述下
(1)SQL Server使用默認索引
USE TSQL2012
GO
SELECT *
FROM Sales.Orders

上述就不用我再啰嗦了,使用默認主鍵創建的聚集索引來執行查詢執行計劃。
(2)SQL Server使用強制索引
USE TSQL2012
GO
SELECT custid
FROM Sales.Orders WITH(INDEX(idx_nc_custid))

(3)SQL Server使用內聯查詢條件

USE TSQL2012
GO
SELECT custid
FROM Sales.Orders WITH (INDEX(idx_nc_custid))
INNER JOIN Sales.OrderDetails WITH (INDEX(PK_OrderDetails))
ON Sales.OrderDetails.orderid = Sales.Orders.orderid
GO
(4)SQL Server使用OPTION
上述我們第三個使用內聯查詢是比較好的,同時我們可以在表連接中末尾使用OPTION來強制使用索引,因為涉及到表連接,我們會用到另外一個函數Hints。該Hints用在Join Hints、Query Hints、Table Hints。如果我們指定用Hints很明顯將覆蓋查詢計劃,因為將SQL Server默認在查詢上會使用最優查詢,此時通過Hints將可能會覆蓋最優查詢,所以一般不推薦使用,只對于明確知道這樣做會比默認查詢計劃會更好的有豐富經驗的SQL Server使用者可能會是好的解決方案。但是對于OPTION我們可以使用,OPTION才SQL Server 2008+上才有,上述第三個強制使用內聯查詢提示可以通過OPTION結合Hints來完成。
USE TSQL2012
GO
SELECT custid
FROM Sales.Orders AS SO
INNER JOIN Sales.OrderDetails AS SOD
ON SOD.orderid = SO.orderid
OPTION (TABLE HINT(SO,INDEX(idx_nc_custid)),TABLE HINT(SOD, INDEX(PK_OrderDetails)))
GO

上述不推薦使用,除非你明確這樣做比默認使用最優執行查詢計劃更好。
Columnstore Index
列存儲索引出現在SQL Server 2012+上,我們本節簡單說說這個內容,對于大數據方面合理使用列存儲索引能夠提高查詢性能,但是通過查找大量資料發現在SQL Server 2012中使用列存儲索引有諸多限制并且還會出現許多問題,而在SQL Server 2014+上這樣的問題得到了很大的改善,所以不建議在SQL Server 2012中使用列存儲索引,要使用可以在 SQL Server 2014+上使用。
當我們在SQL Server 2012中創建索引會提示有Columnstore Index和NONCLUSTERED COLUMNSTORE INDEX。在數據庫中存儲數據分為兩種,一種是行存儲,另外一種則是列存儲,行存儲是在頁上存儲所有行數據,而列存儲則是在相同頁上存儲一列所有數據,所以利用列存儲查找數據會更加快而不是查找整行上的所有數據,當然這也就意味著查找速度的增加而導致的則是硬件驅動配置需要有更高的要求,列存儲中的索引會進行壓縮,所以要使用列存儲需要更大的內存。列存儲索引存儲每一列數據在每一組單獨的磁盤頁中,而不是在每頁上存儲多行,它和行存儲存儲數據區別在于如下圖

這里關于例子就不再給出,算是做一個基本了解吧。
總結
本節我們主要講了強制使用索引條件來進行查詢,當對于使用默認創建索引進行查詢計劃時覺得不是最優解,可以嘗試使用強制索引來進行對比找出更好得解決方案。簡短的內容,深入的理解,我們下節再會。
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,同時也希望多多支持腳本之家!
您可能感興趣的文章:- SQL Server 2005通用分頁存儲過程及多表聯接應用
- SQL設置SQL Server最大連接數及查詢語句
- 解析SQL Server聚焦移除(Bookmark Lookup、RID Lookup、Key Lookup)
- 詳解SQL Server的聚焦過濾索引
- 淺析SQL Server的分頁方式 ISNULL與COALESCE性能比較
- 詳解SQL Server中的數據類型
- 淺析SQL Server的聚焦使用索引和查詢執行計劃
- 淺析SQL Server 聚焦索引對非聚集索引的影響
- 如何快速刪掉SQL Server登錄時登錄名下拉列表框中的選項
- 淺談SQL Server交叉聯接 內部聯接