SQL Server 2008 處理隱含資料型別轉換在執行計畫中的增強
透過以下測試驗證,首先建立資料分佈不平均的測試表。
USE tempdb GOCREATE TABLE _t( c varchar(50) );CREATE INDEX IX_c ON _t( c );GO-- 加入 10000 条数据INSERT _tSELECT (9999 + id) FROM( SELECT TOP 10000 id = ROW_NUMBER() OVER( ORDER BY GETDATE() ) FROM sys.all_columns a, sys.all_columns )ID -- 将 100 - 10000 的数据变成相同值UPDATE _t SET c = '' WHERE c >= '10100'
接著透過 varhcar和nvarchar值分別測試符合條件1條和符合條件8900條的執行計畫預估行數。
ALTER INDEX IX_c ON _t REBUILD;GOSET SHOWPLAN_ALL ONGOSELECT * FROM _t WHERE c = '10005'; -- 实际1条GOSET SHOWPLAN_ALL OFF;GOALTER INDEX IX_c ON _t REBUILD;GOSET SHOWPLAN_ALL ONGOSELECT * FROM _t WHERE c = N'10005'; -- 实际1条GOSET SHOWPLAN_ALL OFF;GOALTER INDEX IX_c ON _t REBUILD;GOSET SHOWPLAN_ALL ONGOSELECT * FROM _t WHERE c = ''; -- 实际9900条GOSET SHOWPLAN_ALL OFF;GOALTER INDEX IX_c ON _t REBUILD;GOSET SHOWPLAN_ALL ONGOSELECT * FROM _t WHERE c = N''; -- 实际9900条GOSET SHOWPLAN_ALL OFF;GO
得到的查詢計畫預估行數如下圖所示
#從圖中顯示的預估資料行數可以看到,對於varchar值(不需要隱匿的資料類型轉換),其預估的結果是準確的。但對於nvarchar值,不管指定的值是只有一條數據,還是有8900條數據匹配,其預估的結果都是99.0099,這說明預估並沒有考慮我們指定的值。
進一步用變數測試
ALTER INDEX IX_c ON _t REBUILD;GOSET SHOWPLAN_ALL ONGODECLARE @v varchar;SELECT * FROM _t WHERE c = @v; -- varcharGOSET SHOWPLAN_ALL OFF;GOALTER INDEX IX_c ON _t REBUILD;GOSET SHOWPLAN_ALL ONGODECLARE @nv nvarchar;SELECT * FROM _t WHERE c = @nv; -- nvarcharGOSET SHOWPLAN_ALL OFF;GO
結果如下圖所示:
#不管是varchar,還是nvarchar的變量,預估的行數都是99.0099,這個值與使用nvarchar常數值的結果一樣,看來SQL Server查詢最佳化器應該確實把GetRangeThroughConvert 的結果看成變數了,這個應該是設計上考慮不太周全的地方了,畢竟指定固定常數值的時候,GetRangeThroughConvert的結果應該也是確定值才對。
本文說明了SQL Server的相關內容,更多相關內容請關注php中文網。
相關推薦:
以上是SQL Server 2008 處理隱含資料型別轉換在執行計畫中的增強的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

microsoft sql server是Microsoft公司推出的關係型資料庫管理系統,是一個全面的資料庫平台,使用整合的商業智慧(BI)工具提供了企業級的資料管理,具有使用方便可伸縮性好與相關軟體整合程度高等優點。 SQL Server資料庫引擎為關聯式資料和結構化資料提供了更安全可靠的儲存功能,使用戶可以建置和管理用於業務的高可用和高效能的資料應用程式。

SQLServer還是MySQL?最新研究揭秘最佳資料庫選擇近年來,隨著網路和大數據的快速發展,資料庫的選擇成為了企業和開發者面臨的重要議題。在眾多資料庫中,SQLServer和MySQL作為兩個最常見且廣泛使用的關聯式資料庫,備受爭議。那麼,在SQLServer和MySQL之間,到底該選擇哪一個呢?最新的研究為我們揭示了這個問題。首先,讓

如何使用PDO連接到MicrosoftSQLServer資料庫介紹:PDO(PHPDataObjects)是PHP提供的一個存取資料庫的統一介面。它提供了許多優點,例如實作了資料庫的抽象層,可以方便地切換不同的資料庫類型,而不需要修改大量的程式碼。本文將介紹如何使用PDO連接到MicrosoftSQLServer資料庫,並提供一些相關程式碼範例。步驟

隨著互聯網的普及,網站和應用程式的開發成為了許多企業和個人的主要業務。而PHP和SQLServer資料庫則是其中非常重要的兩個工具。 PHP是一種伺服器端腳本語言,可用於開發動態網站;SQLServer是微軟公司開發的關聯式資料庫管理系統,具有廣泛的應用場景。在本文中,我們將討論PHP和SQLServer的開發,以及它們的優缺點和應用方法。首先,讓我們

SQLServer與MySQL比較:哪個資料庫更適合高可用性架構?在當今的數據驅動世界中,高可用性是建立可靠和穩定係統的必要條件之一。資料庫作為資料儲存和管理的核心元件,其高可用性對於企業的業務運作至關重要。在眾多的資料庫中,SQLServer和MySQL是常見的選擇。那麼在高可用性架構方面,究竟哪個資料庫比較適合呢?本文將對二者進行對比,並給予一些建議。

在Web開發中,PHP與MySQL的結合是非常常見的。但是,在某些情況下,我們需要連接其他類型的資料庫,例如SQL Server。在本文中,我們將介紹使用PHP連接SQL Server的五種不同方法。

SQLServer和MySQL是目前兩個非常流行的關係型資料庫管理系統(RDBMS)。它們都是用於儲存和管理大規模資料的強大工具。然而,它們在處理大規模數據時有一些不同之處。本文將對SQLServer和MySQL進行比較,重點在於它們在大規模資料處理方面的適用性。首先,讓我們來了解一下SQLServer和MySQL的基本特性。 SQLServer是由微軟

隨著網路的不斷發展,資料庫的選擇愈發重要。在眾多的資料庫中,SQLServer和MySQL是兩個備受矚目的選項。 SQLServer是微軟公司開發的關聯式資料庫管理系統,而MySQL則是一種開源的關係型資料庫管理系統。那麼在SQLServer和MySQL之間如何選擇最佳的資料庫方案呢?首先,我們可以從效能方面比較這兩個資料庫。 SQLServer正在處理
