簡體   English   中英

SAS企業指南/ SQL性能

[英]SAS Enterprise Guide / SQL Performance

我正在尋找有關SAS / SQL性能問題的一些指導。 在《 SAS企業指南》中,我創建了一個創建表的程序。 該表約有9萬行:

CREATE TABLE test AS (
  SELECT id, SUM(myField)
  FROM table1
  GROUP BY id
)

我有一個更大的表,有數百萬行。 每行都有一個ID。 我想僅使用“測試”表中存在的ID對表中的值求和。 我嘗試了這個:

CREATE TABLE test2 AS(
  SELECT big.id, SUM(big.myOtherField)
  FROM big
  INNER JOIN test
    ON test.id = big.id
  GROUP BY big.id
)

我遇到的問題是,要對具有數百萬條記錄的大表運行第二個查詢要花很多時間。 我以為id的子集上的內部聯接會有所幫助(也許是),但是我想確保自己正在盡一切努力來加快它的速度。

我沒有任何方法可以獲取有關基礎數據庫索引的信息。 我對吸引比我有更多SQL和SAS經驗的人更感興趣。

根據問題所顯示的內容,您正在聯接兩個SAS數據集,而不是兩個數據庫對象。 無論如何,您可以通過在每個表中使用的JOIN列上定義索引來加快處理速度。 假設您有權這樣做,請參考以下示例:

proc sql;
   create index id on big(id);
   create index id on test(id);
quit;

當然,您可能應該先檢查表定義再執行此操作。 您可以使用“ describe”語句查看結構:

proc sql;
   describe table big;
quit;

索引以磁盤空間為代價提高訪問性能並更新維護。 創建索引后,索引將成為SAS數據集的永久部分,並且如果使用SQL INSERT或DELETE語句,索引將自動更新。 但是請注意,如果使用簡單的數據步驟重新創建數據集,則索引將被刪除。

另一方面,如果這些表確實在外部數據庫(例如Oracle)中,則您將面臨另一個挑戰。 如果是這樣,我想問一個新問題,並提供您正在使用的SAS代碼的完整示例(包括and libname語句)。

如果您使用的是非SAS數據,即駐留在SQL DB或無SQL數據庫中的數據,則使用直通SQL或如果獲得許可並擁有許可證,則將看到性能的顯着提高。為此,數據庫內處理。

關於proc sql和pass-through sql的重要一點。 默認情況下,Proc sql在執行工作之前會在SAS數據集中創建原始源數據的副本。 而直通僅向源數據提供者請求結果集。 簡而言之,您可以想象具有500萬行的表與proc sql一起使用將花費更長的時間(即使您僅對大約1%的數據感興趣)比僅需拉取那1%的數據要花費更長的時間使用直通機制跨網絡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM