2011-07-18 36 views
0

我需要從22個客戶數據庫中檢索客戶MSISDN(電話號碼)。我創建了一個視圖兩種情況:sybase中的查詢優化

  1. 首先,我們需要檢查哪些MSISDN號碼PROFILE_ID 16240是inactive.This可以通過數據庫查詢,其靜態數據不是空來完成。

  2. 由於GPRS的,我們有兩個輪廓25054和16240,它發生E對於MSISDN號碼25054(互聯網用途)是活躍和16240(對於GPRS不活躍) ,所以我們需要爲目的創建腳本。

我已經準備了一個查詢:

CREATE VIEW SUBSCR_INFO_VIEW AS 
SELECT subscr_no,account_no FROM CUSTOMER_PROFILE_DEF WHERE subscr_no NOT IN 
(SELECT DISTINCT(subscr_no) FROM CUSTOMER_ID_EQUIP_MAP 
WHERE inactive_date Is NOT NULL) 
AND (profile_id IN (16240) AND cutoff_end_dt IS NOT NULL) OR (profile_id IN (25054) AND profile_id NOT IN (16240) AND cutoff_end_dt IS NULL) 

SET ROWCOUNT 100 

SELECT DISTINCT(subscr_no) FROM SUBSCR_INFO_VIEW 

這將在所有22級客戶的服務器被擊中,並從單一的客戶需要的數據它採取2.5分鐘。我想縮短那個時間。請讓我知道您的反饋。

回答

0

這是一個有點難以回答,不知道更多關於數據庫的結構。您在CUSTOMER_PROFILE_DEF和CUSTOMER_ID_EQUIP_MAP表中有多少條記錄,以及您擁有哪些關鍵字?另外,你的SQL是非常困難的在原崗位去理解,我已經重新格式化它的下方,做了一些小的變化:

CREATE VIEW 
     SUBSCR_INFO_VIEW 
    AS SELECT 
     subscr_no, 
     account_no 
    FROM 
     CUSTOMER_PROFILE_DEF 
    WHERE 
     subscr_no 
    NOT IN (
      SELECT DISTINCT 
       subscr_no 
      FROM 
       CUSTOMER_ID_EQUIP_MAP 
      WHERE 
       inactive_date Is NOT NULL 
     ) 
    AND ((profile_id = 16240 AND cutoff_end_dt IS NOT NULL) 
    OR (profile_id = 25054 AND cutoff_end_dt IS NULL)) 

    SET ROWCOUNT 100 -- This is just for testing? 

    SELECT DISTINCT(subscr_no) FROM SUBSCR_INFO_VIEW 

的SQL很大程度上是相同的,但我改變了你的profile_id in (12345)語句profile_id = 12345作爲有值列表中只有一個值。