2010-08-06 225 views
2

我有一張[100萬數據,11列]表。我的選擇查詢[select * from tbl]似乎需要2分鐘才能完成。SQL查詢性能

服務器是SQL Server Express 2005.表具有聚集索引[主鍵],沒有其他索引。

如果我使用select * into table1 from tbl創建表的副本,則新表上的相同選擇查詢最多需要10秒。我在表結構中找不到任何差異

什麼可能導致原始表格變慢?

+0

外部碎片是什麼樣的? – 2010-08-06 05:22:23

+1

統計信息:更新它們或重建索引 – 2010-08-06 05:28:25

回答

1

你如何運行查詢?來自遠程連接的SQL工具嗎?如果是這樣的話,部分問題可能與將數百行數據傳輸到客戶端(以及客戶端隨後處理該數據)的成本有關。也可能來自tbl查詢的select * into table1被數據庫巧妙地優化。鑑於查詢正在創建表的精確副本,數據庫可能能夠執行更高效的操作來複制數據,然後通過其通用SQL機制。您可以通過比較更復雜的查詢來進行測試,例如使用行的子集並在where子句中添加一些約束。

4

什麼原因導致表 變慢?

什麼都沒有。這並不慢。

「select * from table from table」 - 數據永遠不會離開服務器。

「select * from table」 - 將數據發送給必須進行處理的客戶端。這也意味着你通過某種網絡接口(甚至是本地)發送數據 - 所有這些都是開銷。

讀取1100萬行只需要時間來處理。

+0

我的第一個表數據是使用來自.net應用程序的SQLBulkcopy創建的。我使用select * into創建了第二個表。 從表1中選擇*比從表2中選擇*要慢 – Samjog 2010-08-09 14:26:47