sybase中的查询优化
我需要从22个客户数据库中检索客户MSISDN(电话号码)。我为两种情况创建了一个视图:sybase中的查询优化,sybase,Sybase,我需要从22个客户数据库中检索客户MSISDN(电话号码)。我为两种情况创建了一个视图: 首先,我们需要检查哪个MSISDNs配置文件_id 16240处于非活动状态。这可以通过查询非活动数据不为null的数据库来完成 因为对于GPRS,我们有两个配置文件25054和16240,所以MSISDNs 25054(用于互联网)的e处于活动状态,而16240(用于GPRS未处于活动状态) 所以我们需要为此创建脚本 我准备了一个问题: CREATE VIEW SUBSCR_INFO_VIEW AS SE
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分钟。我希望缩短这一时间。请让我知道您的反馈。如果不了解更多关于数据库结构的信息,这有点难以回答。您在CUSTOMER_PROFILE_DEF和CUSTOMER_ID_Equipment_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基本相同,但我将(12345)语句中的profile\u id更改为profile\u id=12345
,因为值列表中只有一个值