Contents Index Maintaining the subscription-list column Using the Subscribe_by_remote option with many-to-many relationships

SQL Remote User's Guide
  SQL Remote Design for Adaptive Server Enterprise
    Sharing rows among several subscriptions

Tuning extraction performance for shared rows


When extracting or synchronizing a user, the subscription-list column can cause performance problems as it necessitates a full table scan.

If you are extracting databases for many users, and performance is a problem for you, you can use a subscription view to improve performance. The view must contain a subquery, which is used for extraction and synchronization only, and is ignored during log scanning. The tables involved still need to have triggers defined to maintain the subscription-list column.

To create a subscription view

  1. Design a query that uses a subquery to select the proper rows for a subscription from a table.

    For example, continuing the example from the preceding sections, the following query selects the rows of the Contact table for a user subscribed by rep_key value rep5:

    SELECT *
    FROM Contact
    WHERE 'rep5' = (SELECT rep_key
                   FROM Customer
                   WHERE cust_key = Contact.cust_key )
  2. Create a view that contains this subquery. For example:

    CREATE VIEW Customer_sub_view AS
    SELECT *
    FROM dbo.Customer
    WHERE 'repxx' IN ( SELECT rep_key
       FROM dbo.Policy
       WHERE dbo.Policy.cust_key = dbo.Customer.cust_key )

    In this view definition, it does not matter what value you use on the left-hand side of the WHERE clause (repxx in the example above). The replication tools use the subquery for extraction and synchronization only. Rows for which the SUBSCRIBE BY value is in the subquery result set are extracted or synchronized.

  3. Give the name of the view as a parameter to sp_add_article or sp_modify_article:

    exec sp_add_article SalesRepData,
                      'Customer',
                      NULL,
                      'subscription_list',
                      'Customer_sub_view'

    The subscription_list column is used for log scanning and the subquery is used for extraction and synchronization.

    For more information, see Tuning extraction performance, sp_add_article procedure, and sp_modify_article procedure.


Contents Index Maintaining the subscription-list column Using the Subscribe_by_remote option with many-to-many relationships