Sql-Server

SQL Server - 選擇怎麼會這麼慢

  • August 2, 2017

我想知道在“只有”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]))

我想知道 :

  1. 為什麼要花這麼長時間?
  2. 可以做些什麼來改進這樣的簡單查詢

您不是在測試 SQL Server 性能。

您主要通過 SSMS 測試本地 PC 和網路性能。

如果你在 SSMS 中執行它,那麼 SSMS 必須渲染 300,000 行。預設為佔用大量資源的網格模式。而這 300,000 行必須通過網路傳輸。

更改 SSMS 以丟棄這 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 秒。

希望這是有道理的。

引用自:https://dba.stackexchange.com/questions/182480