Sql-Server
SQL Server - 選擇怎麼會這麼慢
我想知道在“只有”300 000 行的表上進行如下所示的簡單查詢是否正常需要 6-7 秒。我正在使用 SQL Server 2014 和 RDBMS 花費這麼多時間來返回“沒有那麼多”的數據,這讓我感到非常驚訝。
SELECT [Id] ,[b] ,[c] ,[d] ,[e] ,[f] ,[g] ,[h] ,[i] ,[j] ,[k] ,[l] ,[m] ,[n] ,[o] ,[p] ,[q] ,[r] ,[s] ,[t] ,[u] ,[v] ,[w] ,[x] ,[y] ,[z] ,[aa] ,[ab] ,[ac] FROM .[dbo].[MyTable]
這是表格說明:
CREATE TABLE MyTable( Id [int] IDENTITY(1,1) NOT NULL, b [nvarchar](50) NULL, c [nvarchar](30) NULL, d [int] NOT NULL, e [nvarchar](350) NULL, f [nvarchar](350) NULL, g [int] NULL, h [int] NULL, i [int] NULL, j [int] NOT NULL, k [float] NOT NULL, l [int] NOT NULL, m [float] NOT NULL, n [float] NOT NULL, o [bit] NOT NULL, p [float] NOT NULL, q [int] NOT NULL, r [nvarchar](max) NULL, s [int] NULL CONSTRAINT [DF_s] DEFAULT ((0)), t [int] NULL, u [int] NULL, v [int] NULL, w [bit] NULL, x [int] NULL, y [int] NULL, z [int] NULL, aa [nvarchar](30) NULL, ab [bit] NOT NULL CONSTRAINT [DF_ab] DEFAULT ((0)), ac [int] NULL, CONSTRAINT [PK_dbo.MyTable] PRIMARY KEY CLUSTERED ([Id]))
我想知道 :
- 為什麼要花這麼長時間?
- 可以做些什麼來改進這樣的簡單查詢
您不是在測試 SQL Server 性能。
您主要通過 SSMS 測試本地 PC 和網路性能。
如果你在 SSMS 中執行它,那麼 SSMS 必須渲染 300,000 行。預設為佔用大量資源的網格模式。而這 300,000 行必須通過網路傳輸。
更改 SSMS 以丟棄這 300,000 行:
是的,當您在本地磁碟或本地電腦上執行時,這是正常的。以下是為什麼需要 5 到 6 秒的統計數據。
從您提供的表架構中,平均行大小為 1700 字節,因此大約在一頁中它只能儲存 4 行
= 8060(頁面大小)/1500 = 5.3,四捨五入到最小值,即 4 行。
= 300000 / 5,需要 55832 頁才能在該表中儲存 300K 記錄
= 55832 * 8 KB = 446650.1241 Kb 需要儲存數據
= 446650.1241 / 1024 = 儲存數據需要 436 MB
因此,當您檢索時,您將從磁碟中提取大約 300 到 400 Mb 的數據。讓我們使用 100Mbps 磁碟,因此檢索它需要 3 到 4 秒,而在 SSMS 中渲染和顯示它需要 2 秒。
希望這是有道理的。