我們的軟件部署在出現性能問題的客戶端,他們聘請了SQL顧問來查看數據庫並查看其瓶頸所在。nvarchar的使用有多糟
顧問發現的其中一件事是我們很多的陳述轉換爲nvarchar
。 經過一番調查,我發現它是PreparedStatement
這樣做。
給你舉個例子:
PreparedStatement query = connection.prepareStatement("SELECT * FROM sys.tables WHERE"
+ " name LIKE ?");
query.setString(1, "%%");
變爲
declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,N'@P0 nvarchar(4000)',N'SELECT * FROM sys.tables WHERE name LIKE @P0 ',N'%%'
select @p1
在另一方面即席executeQuery方法只是通過
ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM sys.tables WHERE name LIKE '%%'");
成爲
發送SQL我試圖解決的是這個實際上有多糟糕。準備好的語句被用在我們的應用程序中,因爲它們的使用比特殊查詢更有效率(如果執行多次)。
此外,我不能看到微軟的人會把他們的驅動程序,他們知道會導致性能問題的東西。
這是我們應該真正關注的東西,還是尋找沒有任何問題的顧問?