Sql-Server-2005
sqloledb vs sqlncli - 性能差異還是只是功能集?
我最近一直在執行一些經典的 ASP 程式碼,想知道使用以下連接是否存在性能差異:
Provider=SQLOLEDB;server=NTSERVERNAME\SQLEXPRESS;database=DBNAME;uid=USER;pwd=PASSWORD;
要麼
Provider=SQLNCLI;server=NTSERVERNAME\SQLEXPRESS;database=DBNAME;uid=USER;pwd=PASSWORD;
我似乎記得某些提供程序選項會對性能產生影響(主要是從 SQL Server 2000 和更早的版本開始),但我無法確定這兩個提供程序是否存在這種情況。
我唯一能找到的文章解釋了後者將讓我使用 SQL Server 2005 中的一些新功能(XML 數據類型等)和一些其他功能支持問題 - 但與性能無關。
我與 Erland Sommarskog 談過此事,這是他的回應。
我作為 PASS 2005 參加了關於 SQL Native Client 的演講。SQL Server 客戶端的當時的 PM 說,對於 ODBC,他們已經實現了 20% 的性能改進,但對於 OLE DB,幾乎是平衡的。
但由於 SQLNCLI 提供了更多功能,因此可能是要使用的提供程序。再說一次,對於舊的 ADO,很多功能無論如何都不可用。
高溫高壓
根據微軟的說法,不推薦使用 SQLNCLI,應該首選 MSOLEDBSQL。
但是我遇到了一個必須在SSIS中使用 SQLNCLI 的情況:我意外地收到了一些*“OLE DB 適配器使用的 OLE DB 提供程序無法* 在 SSIS 數據流中的類型“DT_DBTIMESTAMPOFFSET”和“DT_WSTR”之間轉換…”消息。
經過一些調試後,我發現使用 MSOLEDBSQL 時,某些數據類型無法正確映射。datetime2 或 datetimeoffset 將分別映射到 SSIS 數據類型 DT_WSTR 而不是 DT_DBTIMESTAMP2 和 DT_DBTIMESTAMPOFFSET。