我使用的是SAS大學版爲下表分析(實際上有它2.5M行)如何索引自連接
p_id c_id startyear endyear
0001 3201 2008 2013
0001 2131 2013 2015
0013 3201 2006 2010
其中的p_id是爲person_id和C_ID是companyid。
我想獲得同事的數量在一定的一年,所以我創建了一個表的不同p_ids並做以下查詢(即重疊的跨度期間,在同一公司工作的人數):
PROC SQL;
UPDATE no_colleagues AS t1
SET c2007 = (
SELECT COUNT(DISTINCT t2.p_id) - 1
FROM table AS t2
INNER JOIN table AS t3
ON t3.p_id = t1.p_id
AND t3.c_id = t2.c_id
AND t3.startyear <= t2.endyear % checks overlapping criteria
AND t3.endyear >= t2.startyear % checks overlapping criteria
AND t3.startyear <= 2007 % limits number of returns
AND t2.startyear <= 2007 % limits number of returns
);
索引查詢(p_id,c_id,startyear,endyear)的單個查找需要0.04秒。上面的查詢對於單個更新大約需要1.8秒,並且不使用任何索引。
所以我的問題是:
如何提高查詢,和/或如何使用索引,以確保自連接可以使用索引?
在此先感謝。
請武官'EXPLAIN'計劃。 –