Оптимизация запросов в sybase - PullRequest
0 голосов
/ 18 июля 2011

Мне нужно получить MSISDN клиента (номер телефона) из 22 баз данных клиентов.Я создал представление для двух случаев:

  1. Сначала нам нужно проверить, какие MSISDNs ID_файла 16240 неактивны. Это можно сделать, запросив базу данных, у которой неактивные данные не равны нулю.

  2. Поскольку для GPRS у нас есть два профиля 25054 и 16240, случается, что для 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 минЯ хочу сократить это время.Пожалуйста, дайте мне знать ваш отзыв.

1 Ответ

0 голосов
/ 28 июля 2011

Это немного сложно ответить, не зная больше о структуре базы данных.Сколько записей у вас в таблицах 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, поскольку в списке значений было только одно значение.

...