Showing posts with label speed. Show all posts
Showing posts with label speed. Show all posts

Monday, March 19, 2012

Advanced schema design question for Experts. Please help. Thanks

QUESTIONs:What schema is the best for high speed search for a classified web application?

Is our schema design looks OK? It is a STAR schema and will be used for OLTP type app. Is this OK? or Are we missing something?Please let me know if you need more diagramatic description.

BACKGROUND:Our group is making a classified website (like classified.yahoo.com) where people can place online ad to sell items.like cars, computers, electronics etc. Users will fill out webform for each category(car or computers) with allattributes of the item forsell to post an add.

Main 3 operations the web users will perform:Quick Searching(most frequent): category=car, subcategory=sedan, country=USA city=LosAngeles Zip=empty

Advanced Search(less frequent): User can include all fields\attributes or then can user a subset to query to do advanced search like :

category=car, subcategory=sedan, country=USA, city=Los Angeles, Year= in(00, 03), transmission=Auto, engine=V6, Maker=Honda, Model=Accord, color=Red and Price < 10000

category=car, subcategory=SUV, country=USA, city=NY, Year= in(99, 00, 03), transmission=Auto, Maker=Toyota, and Price between 11000 and 14500

Insert(least frequent): By filling out web form. For Car, the form will have different dimensions\attributes (year, make, model, transmission, mileage, color, price etc)

Current Schema design:Set of core dimension\lookup tables: stores core\common attributes for lookups eg. status={open, new, expired}, country={USA, Canada, India,...}

One custom Lookup table: for all custom attribute lookup: transmission{auto, manual}, engine type{V4, V6} for car, processor{PII, PIII, PIV), RAM(512MB, 1GB, 2GB} for Computer & so

3 Fact Tables:Main fact\Pivot table that stores all sell common attributes eg. price, title, year_made, post_date, expire_date, user_name, description etc.One fact table to store custom string, int, float, date field values of ads.One fact table to store custom dropdown field selection values

Concerns and issues:Looking at the schema, it seems to be a STAR schema with multiple fact tables where all core lookup tables connected to the main Pivot table andcustom lookup table connected to the 2nd and 3rd fact table.

Quick search only queries the Pivot fact table. While Advanced search query requires to join 3 fact tables. Both query requires to join 3 fact tables with alldimension tables(15 to 20 each having avg of 20 values) to get the look up names so that users sees text instead of ids. Search speed is the Main concerns. Insertion\update speed doesn't matter that much as that is less frequently done.

jennifer7290 wrote:

QUESTIONs:What schema is the best for high speed search for a classified web application?


Is our schema design looks OK? It is a STAR schema and will be used for OLTP type app. Is this OK? or Are we missing something?Please let me know if you need more diagramatic description.



Your model ("3 fact tables") is quite possibly the worst way to do this.
Let's think about it:
- You know what you're selling - Cars, Computers, etc.
- You know what attributes those entities have (Engine Type, Processor Type, etc).
- Users search for entities, not attributes ("give me everything witha V6 and a P4").
So why go with such non-orthagonal design? Subclass your entities:
Ads := ( Ad_Num, Ad_Type, Price, Start_Date, ...)
Ad_Type IN ('Auto', 'Computer', 'Boat', 'Service', ...)
Auto_Ad_Attributes := ( Ad_Num, Engine_Size, Color, ...)
Computer_Ad_Attributes := ( Ad_Num, Processor_Speed, ...)
...
Go with EAV and flush your data integrity down the drain and watch how absurdly slow your clasified system runs when people start using it.

|||Alex,
Thanks for reading it. What is orthogonal design concept? Is it database term or OOP term?
What is EAV stands for? How can I see some example design of your proposed approach or some tutorials, books will be really helpful.
Again, our emphasis is to track all classified information in a webbased tool with requirement of complex, dynamic query with HIGH speed in search.
Hope to hear from you.
Regards|||

I did google on it. It sounds like a bad design approach to me. The reasons are too many entities, so too many joins can't be avoided like the STAR schema.
How does your EAV performs better than STAR for classified system for a system with 20 metadata\entity\lookup tables??
HOW DOES YOUR MODEL PROVIDE HIGH SPPED IN SEARCH? Query speed depends on number of joins which can be done through denormalization.
In my case I actually have 1 fact table and 2 mapping intersect table (I mentioned as fact table).
Please see the link below:
Regards

http://ycmi.med.yale.edu/nadkarni/eav_CR_contents.htm
Drawbacks of EAV/CR

  • Considerable up-front programming (wheel reinvention) is needed to do the tasks that a conventional architecture would do automatically. However, such programming needs to be done only once, and availability of generic EAV tools could remove this limitation.
  • EAV design is less efficient than a conventional structure for retrieving data in bulk on numerous objects at a time. (For object-at-a-time retrieval, such as through a Web-based browsing interface, the volume of data is small enough that the difference is not noticeable.)
  • Performing complex attribute-centric queries is both significantly less efficient as well as technically more difficult. This needs a query generator. However, most queries on scientific databases are relatively straightforward, and directed toward specific objects of interest.
  • For schemas that are relatively static and/or simple (e.g., databases for business applications, such as inventory or accounting), the overhead of EAV design exceeds its advantages.
  • If particular classes of data will be used across multiple databases in different domains, and/or there is a large amount of existing code that manipulates them, it should probably be left in its original conventional form. This is the reason why we have chosen to store bibliographic citations (that are not in external databases) conventionally. We similarly store certain genetics-related data conventionally because of a large body of code (from other databases previously created by our group, such as PhenoDB ) that performs computations such as Hardy-Weinberg frequencies and tests of significance.|||


    jennifer7290 wrote:

    Alex,
    Thanks for reading it. What is orthogonal design concept? Is it database term or OOP term?
    What is EAV stands for? How can I see some example design of your proposed approach or some tutorials, books will be really helpful.

    Again, our emphasis is to track all classified information in a webbased tool with requirement of complex, dynamic query with HIGH speed in search.
    Hope to hear from you.
    Regards

    EAV = Entity-Attribute Value, a totally unstructured design that involves Entities defined with Attribute/Value pairs:
    EAV := (Entity, Attribute, Value)
    { 'CAR#342', 'Engine', 'V6' }
    { 'CAR#342', 'Color', 'Red' }
    { 'PC#4555', 'CPU', 'Pentium 4' }
    { 'PC#998', 'OS', 'Windows' }

    This is effectively what you are doing with your "fact" tables, except you have three "fact" tables for some reason I really don't understand.

    The design I mentioned is a very basic one. You have a table containing your base entities (advertisements) and tables containing subclass-specific attributes like Engine, Color, etc. You then make views for each type of entitiy:

    Automobile_Ads :=
    SELECT AD.Ad_Num, AD.title, AD.year_made, AD.post_date,
    AD.expire_date, AD.user_name, AD.description , ...,
    AUTO.Make, AUTO.Model, AUTO.Miles, ...,
    FROM Advertisements AD
    INNER JOIN Automobile_Advertisement_Attributes AUTO
    ON AD.Ad_Num = A.Ad_Num

    Find me all Ford Makes with a v6:
    SELECT Make FROM Automobile_Ads WHERE Make='Ford' AND Engine='V6'

    You would be very saddened to see how complex (and rediculously slow) such a query would be in an EAV table.

    It's a very easy design to do: figure out all the entities (what you will allow ads for), then figure out all of the attributes of those entities. For each entity, create an attributes table as desribed above and a view described above.

    |||

    jennifer7290 wrote:

    I did google on it. It sounds like a bad design approach to me. The reasons are too many entities, so too many joins can't be avoided like the STAR schema.
    How does your EAV performs better than STAR for classified system for a system with 20 metadata\entity\lookup tables??


    This is what happens when I POST before I READ. I misunderstood your design as EAV ... now that I read it again, I am a little lost ... could you elaborate by showing some tables ?
  • Sunday, March 11, 2012

    Advance Update Statement Sql Server

    I am trying to speed up my update statements by removing inner select
    statements.

    Example:
    update orders set shipname = (select contactName from
    customers where customerid = orders.customerID)

    I read some articles which said that I should be able to use an inner
    join on the update statement like the following:

    update orders set shipname = (select contactName from customers where
    customerid = orders.customerID)

    But every time that I run this statement I get the follwing error:
    Server: Msg 156, Level 15, State 1, Line 1
    Incorrect syntax near the keyword 'inner'.

    Any Help will be greatly appreciated.

    Thank you.I think you posted the wrong UPDATE statement. Both those statements
    are identical and valid syntax.

    However, if performance is your concern then why not take SHIPNAME out
    of the Orders table. It looks like it's redundant there.

    --
    David Portas
    SQL Server MVP
    --|||See "Changing Data Using the FROM Clause" and also example C under
    UPDATE in Books Online (although it would be better to rewrite it with
    INNER JOIN).

    Simon|||Both statements were the same ?! I think I know what you meant to say
    ...

    As long as the scalar query expression returns zero or one row, you
    will be fine. If you use the proprietary FROM syntax, you will get an
    unpredictable result from a multi-row result set.

    The real cost of an update is in the physical disk access, not the
    code.|||HeadScratcher (mayur@.servicemg.com) writes:
    > I am trying to speed up my update statements by removing inner select
    > statements.
    > Example:
    > update orders set shipname = (select contactName from
    > customers where customerid = orders.customerID)
    > I read some articles which said that I should be able to use an inner
    > join on the update statement like the following:
    > update orders set shipname = (select contactName from customers where
    > customerid = orders.customerID)
    > But every time that I run this statement I get the follwing error:
    > Server: Msg 156, Level 15, State 1, Line 1
    > Incorrect syntax near the keyword 'inner'.

    Apparently there was some glitch in the editing. Anyway, this is what
    you want:

    UPDATE Orders
    SET ShipName = c.ContactName
    FROM Orders o
    JOIN Customers c ON c.CustomerID = O.CustomerID

    I suspect the problem is that you left out the FROM clause.

    I left out INNER here, because this is implied.

    I should add your original syntax is in alignment with ANSI standards,
    whereas the syntax with FROM JOIN is proprietary to MS SQL Server and
    Sybase (and possibly Informix). If you need portability, stick to the
    original syntax. As long as you work with SQL Server only, do as you
    please. Personally, I find the FROM/JOIN syntax very pleasant, as it
    builds on the same paradigm as a regular SELECT statement. It is also
    more effecient, if you need to update more than one column.

    --
    Erland Sommarskog, SQL Server MVP, esquel@.sommarskog.se

    Books Online for SQL Server SP3 at
    http://www.microsoft.com/sql/techin.../2000/books.asp|||David Portas (REMOVE_BEFORE_REPLYING_dportas@.acm.org) writes:
    > However, if performance is your concern then why not take SHIPNAME out
    > of the Orders table. It looks like it's redundant there.

    Nah, I would not recommend people to drop columns from their
    Northwind databases. :-)

    --
    Erland Sommarskog, SQL Server MVP, esquel@.sommarskog.se

    Books Online for SQL Server SP3 at
    http://www.microsoft.com/sql/techin.../2000/books.asp|||>> I find the FROM/JOIN syntax very pleasant, as it builds on the same paradigm as a regular SELECT statement.<<

    Arrrgh! The **consistent meaning in the Standard SQL model** of a
    FROM clause is that a temporary working table is constructed, used and
    dropped at the end of the statement. You would be updating a temporary
    working table, not the base table.

    The Sybase, Informix and MS SQL Server syntax might look the same, but
    the semantics are all slightly different when you get to a 1:m
    relationship. Moving the code is deadly -- it moves over to the next
    platform and runs differently. With the ANSI syntax, the vendors have
    to follow the same rules. This is a good thing.

    Thursday, March 8, 2012

    ADP vs. MDB: Speed

    I have a situation with an ODBC linked view in an Access 2000 MDB with a SQL
    7 back end. The view is scrolling very slowly. However, if I open the view
    in an ADP file, it scrolls quickly.
    I needed to use an ODBC link for the view because it needs to be editable.
    Otherwise, I would have used a pass-through query.
    In previous discussions about using an MDB file vs. an ADP file as a front
    end for SQL Server, the impression I got was that both were about the same,
    but that the MDB was a more mature technology and less problematic than the
    ADP technology. However, the speed difference I'm noticing with the ADP file
    in regards to this view is significant and is very disconcerting re. using
    an MDB file.
    Any thoughts/comments/suggestions would be appreciated. I've reproduced the
    view's SQL below for reference.
    Thanks,
    Neil
    SQL for view in question:
    SELECT INVTRY.[Index], INVTRY.TITLE, INVTRY.AUTHILL1,
    INVTRY.attFirstEdition, INVTRY.attSigned,
    ISNULL(INVTRY.attSignedPD, ' ') SignedCond, INVTRY.YRPUB,
    INVTRY.PRICE, INVTRY.Web, INVTRY.Status,
    INVTRY.WebStatusPending, INVTRY.ActivateDate,
    INVTRY.DeactivateDate, INVTRY.WebAddedBatchID,
    INVTRY.AllowDuplicate, INVTRY.WebAction,
    INVTRY.WebActionPending, INVTRY.DateModified,
    INVTRY.DateWebActionApplied, INVTRY.JIT, INVTRY.MImage,
    INVTRY.HImage, INVTRY.AdCode,
    CASE WHEN INVTRY.WebAddedBatchID IS NOT NULL
    THEN - 1 ELSE 0 END AS OnWeb
    FROM vwInventory_Dupes INNER JOIN
    (WebStatus INNER JOIN
    (INVTRY INNER JOIN
    tabStatus ON INVTRY.Status = tabStatus.Status) ON
    WebStatus.WebStatus = INVTRY.Web) ON
    (vwInventory_Dupes.YearPub = INVTRY.YRPUB) AND
    (vwInventory_Dupes.SignedCond = ISNULL(INVTRY.attSignedPD,
    ' ')) AND (vwInventory_Dupes.Signed = INVTRY.attSigned) AND
    (vwInventory_Dupes.FirstEd = INVTRY.attFirstEdition) AND
    (vwInventory_Dupes.Author = INVTRY.AUTHILL1) AND
    (vwInventory_Dupes.TITLE = INVTRY.TITLE)
    WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    = 1))
    SQL for vwInventory_Dupes, used as subquery:
    SELECT INVTRY.TITLE, INVTRY.AUTHILL1 Author,
    Cast(attFirstEdition AS tinyint) FirstEd,
    Cast(attSigned AS tinyint) Signed,
    ISNULL(INVTRY.attSignedPD, ' ') SignedCond,
    INVTRY.YRPUB YearPub
    FROM WebStatus INNER JOIN
    (INVTRY INNER JOIN
    tabStatus ON INVTRY.Status = tabStatus.Status) ON
    WebStatus.WebStatus = INVTRY.Web
    WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    = 1))
    GROUP BY INVTRY.TITLE, INVTRY.AUTHILL1,
    Cast(attFirstEdition AS tinyint), Cast(attSigned AS tinyint),
    ISNULL(INVTRY.attSignedPD, ' '), INVTRY.YRPUB
    HAVING (((COUNT(INVTRY.[INDEX])) > 1))
    The ways ADPs and MDBs use recordsets are very different, so sometimes one or
    the other will be faster.
    By default, the MDB opens a Dynaset which means it first opens a connection to
    grab the list of keys for the records, then reads the actual records as needed
    for display by doing individual selects of 10 records aby explicit key. This
    can help speed when each row has a lot of data because only the rows that are
    actually viewd will be read, not all of them. On the other hand, if the table
    has a very large number of rows, Access will spend a lot of time in the
    background reading the whole list of keys, and if the key lookup for each row
    is slow for some reason, everything will be sluggish.
    An ADP, a static recordset is normally used, and an absolute cap of 10,000
    rows is applied, so if your recordset has more than that, you just won't get
    all the rows. Static means in loads all the data at once, then you browse
    through it in memeory. That's very fast once you load the data, but if each
    row has a lot of data, especially memo fields and such, it can take a long
    time to initially load.
    On Sun, 20 Mar 2005 08:31:48 GMT, "Neil" <njones@.pxdy.com> wrote:

    >I have a situation with an ODBC linked view in an Access 2000 MDB with a SQL
    >7 back end. The view is scrolling very slowly. However, if I open the view
    >in an ADP file, it scrolls quickly.
    >I needed to use an ODBC link for the view because it needs to be editable.
    >Otherwise, I would have used a pass-through query.
    >In previous discussions about using an MDB file vs. an ADP file as a front
    >end for SQL Server, the impression I got was that both were about the same,
    >but that the MDB was a more mature technology and less problematic than the
    >ADP technology. However, the speed difference I'm noticing with the ADP file
    >in regards to this view is significant and is very disconcerting re. using
    >an MDB file.
    >Any thoughts/comments/suggestions would be appreciated. I've reproduced the
    >view's SQL below for reference.
    >Thanks,
    >Neil
    >SQL for view in question:
    >SELECT INVTRY.[Index], INVTRY.TITLE, INVTRY.AUTHILL1,
    > INVTRY.attFirstEdition, INVTRY.attSigned,
    > ISNULL(INVTRY.attSignedPD, ' ') SignedCond, INVTRY.YRPUB,
    > INVTRY.PRICE, INVTRY.Web, INVTRY.Status,
    > INVTRY.WebStatusPending, INVTRY.ActivateDate,
    > INVTRY.DeactivateDate, INVTRY.WebAddedBatchID,
    > INVTRY.AllowDuplicate, INVTRY.WebAction,
    > INVTRY.WebActionPending, INVTRY.DateModified,
    > INVTRY.DateWebActionApplied, INVTRY.JIT, INVTRY.MImage,
    > INVTRY.HImage, INVTRY.AdCode,
    > CASE WHEN INVTRY.WebAddedBatchID IS NOT NULL
    > THEN - 1 ELSE 0 END AS OnWeb
    >FROM vwInventory_Dupes INNER JOIN
    > (WebStatus INNER JOIN
    > (INVTRY INNER JOIN
    > tabStatus ON INVTRY.Status = tabStatus.Status) ON
    > WebStatus.WebStatus = INVTRY.Web) ON
    > (vwInventory_Dupes.YearPub = INVTRY.YRPUB) AND
    > (vwInventory_Dupes.SignedCond = ISNULL(INVTRY.attSignedPD,
    > ' ')) AND (vwInventory_Dupes.Signed = INVTRY.attSigned) AND
    > (vwInventory_Dupes.FirstEd = INVTRY.attFirstEdition) AND
    > (vwInventory_Dupes.Author = INVTRY.AUTHILL1) AND
    > (vwInventory_Dupes.TITLE = INVTRY.TITLE)
    >WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    > = 1))
    >SQL for vwInventory_Dupes, used as subquery:
    >SELECT INVTRY.TITLE, INVTRY.AUTHILL1 Author,
    > Cast(attFirstEdition AS tinyint) FirstEd,
    > Cast(attSigned AS tinyint) Signed,
    > ISNULL(INVTRY.attSignedPD, ' ') SignedCond,
    > INVTRY.YRPUB YearPub
    >FROM WebStatus INNER JOIN
    > (INVTRY INNER JOIN
    > tabStatus ON INVTRY.Status = tabStatus.Status) ON
    > WebStatus.WebStatus = INVTRY.Web
    >WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    > = 1))
    >GROUP BY INVTRY.TITLE, INVTRY.AUTHILL1,
    > Cast(attFirstEdition AS tinyint), Cast(attSigned AS tinyint),
    > ISNULL(INVTRY.attSignedPD, ' '), INVTRY.YRPUB
    >HAVING (((COUNT(INVTRY.[INDEX])) > 1))
    >
    |||You may try to add a virtual index on your linked view:
    http://support.microsoft.com/kb/q209123/
    If this doesn't help, then you will have to use an unbound form coupled with
    SQL pass-through queries (or ADO objects) to resolve your speed problem with
    MDB. Another solution could be to go with TS to simulate a high-speed LAN.
    I don't know where you got the impression that MDB were about the same as
    ADP in term of speed. It has been repeated a number of times that the use
    of MDB' linked tables and views is only a workable solution for small
    databases on a fast Lan.
    S. L.
    "Neil" <njones@.pxdy.com> wrote in message
    news:Uxa%d.15606$cN6.15135@.newsread1.news.pas.eart hlink.net...
    >I have a situation with an ODBC linked view in an Access 2000 MDB with a
    >SQL 7 back end. The view is scrolling very slowly. However, if I open the
    >view in an ADP file, it scrolls quickly.
    > I needed to use an ODBC link for the view because it needs to be editable.
    > Otherwise, I would have used a pass-through query.
    > In previous discussions about using an MDB file vs. an ADP file as a front
    > end for SQL Server, the impression I got was that both were about the
    > same, but that the MDB was a more mature technology and less problematic
    > than the ADP technology. However, the speed difference I'm noticing with
    > the ADP file in regards to this view is significant and is very
    > disconcerting re. using an MDB file.
    > Any thoughts/comments/suggestions would be appreciated. I've reproduced
    > the view's SQL below for reference.
    > Thanks,
    > Neil
    > SQL for view in question:
    > SELECT INVTRY.[Index], INVTRY.TITLE, INVTRY.AUTHILL1,
    > INVTRY.attFirstEdition, INVTRY.attSigned,
    > ISNULL(INVTRY.attSignedPD, ' ') SignedCond, INVTRY.YRPUB,
    > INVTRY.PRICE, INVTRY.Web, INVTRY.Status,
    > INVTRY.WebStatusPending, INVTRY.ActivateDate,
    > INVTRY.DeactivateDate, INVTRY.WebAddedBatchID,
    > INVTRY.AllowDuplicate, INVTRY.WebAction,
    > INVTRY.WebActionPending, INVTRY.DateModified,
    > INVTRY.DateWebActionApplied, INVTRY.JIT, INVTRY.MImage,
    > INVTRY.HImage, INVTRY.AdCode,
    > CASE WHEN INVTRY.WebAddedBatchID IS NOT NULL
    > THEN - 1 ELSE 0 END AS OnWeb
    > FROM vwInventory_Dupes INNER JOIN
    > (WebStatus INNER JOIN
    > (INVTRY INNER JOIN
    > tabStatus ON INVTRY.Status = tabStatus.Status) ON
    > WebStatus.WebStatus = INVTRY.Web) ON
    > (vwInventory_Dupes.YearPub = INVTRY.YRPUB) AND
    > (vwInventory_Dupes.SignedCond = ISNULL(INVTRY.attSignedPD,
    > ' ')) AND (vwInventory_Dupes.Signed = INVTRY.attSigned) AND
    > (vwInventory_Dupes.FirstEd = INVTRY.attFirstEdition) AND
    > (vwInventory_Dupes.Author = INVTRY.AUTHILL1) AND
    > (vwInventory_Dupes.TITLE = INVTRY.TITLE)
    > WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    > = 1))
    > SQL for vwInventory_Dupes, used as subquery:
    > SELECT INVTRY.TITLE, INVTRY.AUTHILL1 Author,
    > Cast(attFirstEdition AS tinyint) FirstEd,
    > Cast(attSigned AS tinyint) Signed,
    > ISNULL(INVTRY.attSignedPD, ' ') SignedCond,
    > INVTRY.YRPUB YearPub
    > FROM WebStatus INNER JOIN
    > (INVTRY INNER JOIN
    > tabStatus ON INVTRY.Status = tabStatus.Status) ON
    > WebStatus.WebStatus = INVTRY.Web
    > WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    > = 1))
    > GROUP BY INVTRY.TITLE, INVTRY.AUTHILL1,
    > Cast(attFirstEdition AS tinyint), Cast(attSigned AS tinyint),
    > ISNULL(INVTRY.attSignedPD, ' '), INVTRY.YRPUB
    > HAVING (((COUNT(INVTRY.[INDEX])) > 1))
    >
    |||On Sun, 20 Mar 2005 12:32:10 -0500, "Sylvain Lafontaine" <sylvain aei ca (fill
    the blanks, no spam please)> wrote:

    >You may try to add a virtual index on your linked view:
    >http://support.microsoft.com/kb/q209123/
    >If this doesn't help, then you will have to use an unbound form coupled with
    >SQL pass-through queries (or ADO objects) to resolve your speed problem with
    >MDB. Another solution could be to go with TS to simulate a high-speed LAN.
    >I don't know where you got the impression that MDB were about the same as
    >ADP in term of speed. It has been repeated a number of times that the use
    >of MDB' linked tables and views is only a workable solution for small
    >databases on a fast Lan.
    Frankly, I find that statement ludicrous. Many developers including myself
    have had excelent results using MDBs as front-ends to various kinds of SQL
    Server back-end for many years before there was such a thing as an ADP. When
    MDBs are slow, the workarounds to fix it are far less arduous than the
    workarounds required in ADPs to simply make them function in many cases.
    |||The view in question only returns 1154 rows. So we're not talking a large
    number here. And only returning 24 fields.
    There was a modification recently where three additional fields were added
    to the view, and that seemed to slow things down significantly. I'm not sure
    if there's some boundary at around 24 fields, or if something else is going
    on. But the linked view is *very* slow, taking several seconds just to bring
    up the first screen, and then, whenever the scroll bar goes down by one,
    several more seconds just to refresh. The ADP view, on the other hand, is
    fast, with no delay at all, either in bringing up the data or in scrolling.
    Neil
    "Steve Jorgensen" <nospam@.nospam.nospam> wrote in message
    news:kq9r31tdjl3tv8v10kourkov1psurko5ug@.4ax.com...
    > The ways ADPs and MDBs use recordsets are very different, so sometimes one
    > or
    > the other will be faster.
    > By default, the MDB opens a Dynaset which means it first opens a
    > connection to
    > grab the list of keys for the records, then reads the actual records as
    > needed
    > for display by doing individual selects of 10 records aby explicit key.
    > This
    > can help speed when each row has a lot of data because only the rows that
    > are
    > actually viewd will be read, not all of them. On the other hand, if the
    > table
    > has a very large number of rows, Access will spend a lot of time in the
    > background reading the whole list of keys, and if the key lookup for each
    > row
    > is slow for some reason, everything will be sluggish.
    > An ADP, a static recordset is normally used, and an absolute cap of 10,000
    > rows is applied, so if your recordset has more than that, you just won't
    > get
    > all the rows. Static means in loads all the data at once, then you browse
    > through it in memeory. That's very fast once you load the data, but if
    > each
    > row has a lot of data, especially memo fields and such, it can take a long
    > time to initially load.
    > On Sun, 20 Mar 2005 08:31:48 GMT, "Neil" <njones@.pxdy.com> wrote:
    >
    |||> You may try to add a virtual index on your linked view:
    > http://support.microsoft.com/kb/q209123/
    Yes, these are added when you first attach the view or table. When the
    object doesn't have a primary key (as with views) Access prompts you for
    which field(s) to use as pk. It then stores that information. You can't
    update the data otherwise. So it's already there.

    > If this doesn't help, then you will have to use an unbound form coupled
    > with SQL pass-through queries (or ADO objects) to resolve your speed
    > problem with MDB.
    As noted, the reason for not using pass-through is because it needs to be
    updatable.

    >Another solution could be to go with TS to simulate a high-speed LAN.
    What is "TS"?

    > I don't know where you got the impression that MDB were about the same as
    > ADP in term of speed. It has been repeated a number of times that the use
    > of MDB' linked tables and views is only a workable solution for small
    > databases on a fast Lan.
    From discussions in this newsgroup.
    Neil

    > S. L.
    > "Neil" <njones@.pxdy.com> wrote in message
    > news:Uxa%d.15606$cN6.15135@.newsread1.news.pas.eart hlink.net...
    >
    |||TS = Terminal Server; you can also use Citrix. This is a quick fix for
    getting a multi-user access to an Access' MDB file over the Internet or to
    solve the possibility of corruption when you LAN network is not rock solid.
    However, this solution come with a price ($).
    With the use of unbound forms as the solution, you are responsible for
    sending the modifications to the data back to the database. This will give
    you the possibility to use the result of a read-only SQL pass-through in a
    form but, obviously, with the obligation of having more coding work to be
    done. Of course, some of this work can be partially automated. You will
    find more information on that subject on books dealing with Access and
    SQL-Server. (Personally, I prefer to use ADP but it has many bugs.)
    By using the profiler on the SQL-Server, it is also possible that you will
    see something that will give you the possibility of resolving the speed
    problem of you linked views by having a better understanding of what Access
    is doing when it communicates with the server.
    S. L.
    "Neil" <njones@.pxdy.com> wrote in message
    news:FCk%d.633$H06.566@.newsread3.news.pas.earthlin k.net...
    > Yes, these are added when you first attach the view or table. When the
    > object doesn't have a primary key (as with views) Access prompts you for
    > which field(s) to use as pk. It then stores that information. You can't
    > update the data otherwise. So it's already there.
    >
    > As noted, the reason for not using pass-through is because it needs to be
    > updatable.
    >
    > What is "TS"?
    >
    > From discussions in this newsgroup.
    > Neil
    >
    >
    |||Are you talking about the WAN or a LAN?
    In the case of the WAN, all tests that I have done in the past indicate that
    MDB files are much slower to access a SQL-Server backend. The use of linked
    views will greatly reduce the performance hit but even with them, I don't
    see the benefice of creating hundred of views instead of creating hundred of
    stored procedures. If you want to get some decent speed over the internet,
    there are a lot more of work to do using MDB than using ADP and even then,
    I'm not really sure if the use of linked views will achieve the same level
    of performance.
    You are entitled to your opinion but all the tests that I have done in the
    past clearly indicate that the use of MDB to access a SQL-Server over the
    internet is only, at its best, a kludge.
    For a LAN, the problem is of course much less severe but at the condition
    that the network is not already overcrowded.
    S. L.
    "Steve Jorgensen" <nospam@.nospam.nospam> wrote in message
    news:vvgr31l3buv11blqbv3utfk22uhgoa3vab@.4ax.com...
    > On Sun, 20 Mar 2005 12:32:10 -0500, "Sylvain Lafontaine" <sylvain aei ca
    > (fill
    > the blanks, no spam please)> wrote:
    >
    > Frankly, I find that statement ludicrous. Many developers including
    > myself
    > have had excelent results using MDBs as front-ends to various kinds of SQL
    > Server back-end for many years before there was such a thing as an ADP.
    > When
    > MDBs are slow, the workarounds to fix it are far less arduous than the
    > workarounds required in ADPs to simply make them function in many cases.
    >
    |||Did you specify a field or set of fields to be used as the primary key for the
    view when you created the link? If not, it will be slower, and will not be
    updateable.
    On Sun, 20 Mar 2005 19:58:33 GMT, "Neil" <njones@.pxdy.com> wrote:

    >The view in question only returns 1154 rows. So we're not talking a large
    >number here. And only returning 24 fields.
    >There was a modification recently where three additional fields were added
    >to the view, and that seemed to slow things down significantly. I'm not sure
    >if there's some boundary at around 24 fields, or if something else is going
    >on. But the linked view is *very* slow, taking several seconds just to bring
    >up the first screen, and then, whenever the scroll bar goes down by one,
    >several more seconds just to refresh. The ADP view, on the other hand, is
    >fast, with no delay at all, either in bringing up the data or in scrolling.
    >Neil
    >
    >"Steve Jorgensen" <nospam@.nospam.nospam> wrote in message
    >news:kq9r31tdjl3tv8v10kourkov1psurko5ug@.4ax.com.. .
    >
    |||Well, perhaps the reason for our difference of opinion is that I never thought
    it was particularly appropriate to connect directly to a database server
    across a WAN at all. I usually recommend using a terminal server or rewriting
    the app as a Web application or some other kind of 3-tier application.
    On Sun, 20 Mar 2005 16:49:55 -0500, "Sylvain Lafontaine" <sylvain aei ca (fill
    the blanks, no spam please)> wrote:

    >Are you talking about the WAN or a LAN?
    >In the case of the WAN, all tests that I have done in the past indicate that
    >MDB files are much slower to access a SQL-Server backend. The use of linked
    >views will greatly reduce the performance hit but even with them, I don't
    >see the benefice of creating hundred of views instead of creating hundred of
    >stored procedures. If you want to get some decent speed over the internet,
    >there are a lot more of work to do using MDB than using ADP and even then,
    >I'm not really sure if the use of linked views will achieve the same level
    >of performance.
    >You are entitled to your opinion but all the tests that I have done in the
    >past clearly indicate that the use of MDB to access a SQL-Server over the
    >internet is only, at its best, a kludge.
    >For a LAN, the problem is of course much less severe but at the condition
    >that the network is not already overcrowded.
    >S. L.
    >"Steve Jorgensen" <nospam@.nospam.nospam> wrote in message
    >news:vvgr31l3buv11blqbv3utfk22uhgoa3vab@.4ax.com.. .
    >

    ADP vs. MDB: Speed

    I have a situation with an ODBC linked view in an Access 2000 MDB with a SQL
    7 back end. The view is scrolling very slowly. However, if I open the view
    in an ADP file, it scrolls quickly.
    I needed to use an ODBC link for the view because it needs to be editable.
    Otherwise, I would have used a pass-through query.
    In previous discussions about using an MDB file vs. an ADP file as a front
    end for SQL Server, the impression I got was that both were about the same,
    but that the MDB was a more mature technology and less problematic than the
    ADP technology. However, the speed difference I'm noticing with the ADP file
    in regards to this view is significant and is very disconcerting re. using
    an MDB file.
    Any thoughts/comments/suggestions would be appreciated. I've reproduced the
    view's SQL below for reference.
    Thanks,
    Neil
    SQL for view in question:
    SELECT INVTRY.[Index], INVTRY.TITLE, INVTRY.AUTHILL1,
    INVTRY.attFirstEdition, INVTRY.attSigned,
    ISNULL(INVTRY.attSignedPD, ' ') SignedCond, INVTRY.YRPUB,
    INVTRY.PRICE, INVTRY.Web, INVTRY.Status,
    INVTRY.WebStatusPending, INVTRY.ActivateDate,
    INVTRY.DeactivateDate, INVTRY.WebAddedBatchID,
    INVTRY.AllowDuplicate, INVTRY.WebAction,
    INVTRY.WebActionPending, INVTRY.DateModified,
    INVTRY.DateWebActionApplied, INVTRY.JIT, INVTRY.MImage,
    INVTRY.HImage, INVTRY.AdCode,
    CASE WHEN INVTRY.WebAddedBatchID IS NOT NULL
    THEN - 1 ELSE 0 END AS OnWeb
    FROM vwInventory_Dupes INNER JOIN
    (WebStatus INNER JOIN
    (INVTRY INNER JOIN
    tabStatus ON INVTRY.Status = tabStatus.Status) ON
    WebStatus.WebStatus = INVTRY.Web) ON
    (vwInventory_Dupes.YearPub = INVTRY.YRPUB) AND
    (vwInventory_Dupes.SignedCond = ISNULL(INVTRY.attSignedPD,
    ' ')) AND (vwInventory_Dupes.Signed = INVTRY.attSigned) AND
    (vwInventory_Dupes.FirstEd = INVTRY.attFirstEdition) AND
    (vwInventory_Dupes.Author = INVTRY.AUTHILL1) AND
    (vwInventory_Dupes.TITLE = INVTRY.TITLE)
    WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    = 1))
    SQL for vwInventory_Dupes, used as subquery:
    SELECT INVTRY.TITLE, INVTRY.AUTHILL1 Author,
    Cast(attFirstEdition AS tinyint) FirstEd,
    Cast(attSigned AS tinyint) Signed,
    ISNULL(INVTRY.attSignedPD, ' ') SignedCond,
    INVTRY.YRPUB YearPub
    FROM WebStatus INNER JOIN
    (INVTRY INNER JOIN
    tabStatus ON INVTRY.Status = tabStatus.Status) ON
    WebStatus.WebStatus = INVTRY.Web
    WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    = 1))
    GROUP BY INVTRY.TITLE, INVTRY.AUTHILL1,
    Cast(attFirstEdition AS tinyint), Cast(attSigned AS tinyint),
    ISNULL(INVTRY.attSignedPD, ' '), INVTRY.YRPUB
    HAVING (((COUNT(INVTRY.[INDEX])) > 1))The ways ADPs and MDBs use recordsets are very different, so sometimes one o
    r
    the other will be faster.
    By default, the MDB opens a Dynaset which means it first opens a connection
    to
    grab the list of keys for the records, then reads the actual records as need
    ed
    for display by doing individual selects of 10 records aby explicit key. Thi
    s
    can help speed when each row has a lot of data because only the rows that ar
    e
    actually viewd will be read, not all of them. On the other hand, if the tab
    le
    has a very large number of rows, Access will spend a lot of time in the
    background reading the whole list of keys, and if the key lookup for each ro
    w
    is slow for some reason, everything will be sluggish.
    An ADP, a static recordset is normally used, and an absolute cap of 10,000
    rows is applied, so if your recordset has more than that, you just won't get
    all the rows. Static means in loads all the data at once, then you browse
    through it in memeory. That's very fast once you load the data, but if each
    row has a lot of data, especially memo fields and such, it can take a long
    time to initially load.
    On Sun, 20 Mar 2005 08:31:48 GMT, "Neil" <njones@.pxdy.com> wrote:

    >I have a situation with an ODBC linked view in an Access 2000 MDB with a SQ
    L
    >7 back end. The view is scrolling very slowly. However, if I open the view
    >in an ADP file, it scrolls quickly.
    >I needed to use an ODBC link for the view because it needs to be editable.
    >Otherwise, I would have used a pass-through query.
    >In previous discussions about using an MDB file vs. an ADP file as a front
    >end for SQL Server, the impression I got was that both were about the same,
    >but that the MDB was a more mature technology and less problematic than the
    >ADP technology. However, the speed difference I'm noticing with the ADP fil
    e
    >in regards to this view is significant and is very disconcerting re. using
    >an MDB file.
    >Any thoughts/comments/suggestions would be appreciated. I've reproduced the
    >view's SQL below for reference.
    >Thanks,
    >Neil
    >SQL for view in question:
    >SELECT INVTRY.[Index], INVTRY.TITLE, INVTRY.AUTHILL1,
    > INVTRY.attFirstEdition, INVTRY.attSigned,
    > ISNULL(INVTRY.attSignedPD, ' ') SignedCond, INVTRY.YRPUB,
    > INVTRY.PRICE, INVTRY.Web, INVTRY.Status,
    > INVTRY.WebStatusPending, INVTRY.ActivateDate,
    > INVTRY.DeactivateDate, INVTRY.WebAddedBatchID,
    > INVTRY.AllowDuplicate, INVTRY.WebAction,
    > INVTRY.WebActionPending, INVTRY.DateModified,
    > INVTRY.DateWebActionApplied, INVTRY.JIT, INVTRY.MImage,
    > INVTRY.HImage, INVTRY.AdCode,
    > CASE WHEN INVTRY.WebAddedBatchID IS NOT NULL
    > THEN - 1 ELSE 0 END AS OnWeb
    >FROM vwInventory_Dupes INNER JOIN
    > (WebStatus INNER JOIN
    > (INVTRY INNER JOIN
    > tabStatus ON INVTRY.Status = tabStatus.Status) ON
    > WebStatus.WebStatus = INVTRY.Web) ON
    > (vwInventory_Dupes.YearPub = INVTRY.YRPUB) AND
    > (vwInventory_Dupes.SignedCond = ISNULL(INVTRY.attSignedPD,
    > ' ')) AND (vwInventory_Dupes.Signed = INVTRY.attSigned) AND
    > (vwInventory_Dupes.FirstEd = INVTRY.attFirstEdition) AND
    > (vwInventory_Dupes.Author = INVTRY.AUTHILL1) AND
    > (vwInventory_Dupes.TITLE = INVTRY.TITLE)
    >WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    > = 1))
    >SQL for vwInventory_Dupes, used as subquery:
    >SELECT INVTRY.TITLE, INVTRY.AUTHILL1 Author,
    > Cast(attFirstEdition AS tinyint) FirstEd,
    > Cast(attSigned AS tinyint) Signed,
    > ISNULL(INVTRY.attSignedPD, ' ') SignedCond,
    > INVTRY.YRPUB YearPub
    >FROM WebStatus INNER JOIN
    > (INVTRY INNER JOIN
    > tabStatus ON INVTRY.Status = tabStatus.Status) ON
    > WebStatus.WebStatus = INVTRY.Web
    >WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    > = 1))
    >GROUP BY INVTRY.TITLE, INVTRY.AUTHILL1,
    > Cast(attFirstEdition AS tinyint), Cast(attSigned AS tinyint),
    > ISNULL(INVTRY.attSignedPD, ' '), INVTRY.YRPUB
    >HAVING (((COUNT(INVTRY.[INDEX])) > 1))
    >|||You may try to add a virtual index on your linked view:
    http://support.microsoft.com/kb/q209123/
    If this doesn't help, then you will have to use an unbound form coupled with
    SQL pass-through queries (or ADO objects) to resolve your speed problem with
    MDB. Another solution could be to go with TS to simulate a high-speed LAN.
    I don't know where you got the impression that MDB were about the same as
    ADP in term of speed. It has been repeated a number of times that the use
    of MDB' linked tables and views is only a workable solution for small
    databases on a fast Lan.
    S. L.
    "Neil" <njones@.pxdy.com> wrote in message
    news:Uxa%d.15606$cN6.15135@.newsread1.news.pas.earthlink.net...
    >I have a situation with an ODBC linked view in an Access 2000 MDB with a
    >SQL 7 back end. The view is scrolling very slowly. However, if I open the
    >view in an ADP file, it scrolls quickly.
    > I needed to use an ODBC link for the view because it needs to be editable.
    > Otherwise, I would have used a pass-through query.
    > In previous discussions about using an MDB file vs. an ADP file as a front
    > end for SQL Server, the impression I got was that both were about the
    > same, but that the MDB was a more mature technology and less problematic
    > than the ADP technology. However, the speed difference I'm noticing with
    > the ADP file in regards to this view is significant and is very
    > disconcerting re. using an MDB file.
    > Any thoughts/comments/suggestions would be appreciated. I've reproduced
    > the view's SQL below for reference.
    > Thanks,
    > Neil
    > SQL for view in question:
    > SELECT INVTRY.[Index], INVTRY.TITLE, INVTRY.AUTHILL1,
    > INVTRY.attFirstEdition, INVTRY.attSigned,
    > ISNULL(INVTRY.attSignedPD, ' ') SignedCond, INVTRY.YRPUB,
    > INVTRY.PRICE, INVTRY.Web, INVTRY.Status,
    > INVTRY.WebStatusPending, INVTRY.ActivateDate,
    > INVTRY.DeactivateDate, INVTRY.WebAddedBatchID,
    > INVTRY.AllowDuplicate, INVTRY.WebAction,
    > INVTRY.WebActionPending, INVTRY.DateModified,
    > INVTRY.DateWebActionApplied, INVTRY.JIT, INVTRY.MImage,
    > INVTRY.HImage, INVTRY.AdCode,
    > CASE WHEN INVTRY.WebAddedBatchID IS NOT NULL
    > THEN - 1 ELSE 0 END AS OnWeb
    > FROM vwInventory_Dupes INNER JOIN
    > (WebStatus INNER JOIN
    > (INVTRY INNER JOIN
    > tabStatus ON INVTRY.Status = tabStatus.Status) ON
    > WebStatus.WebStatus = INVTRY.Web) ON
    > (vwInventory_Dupes.YearPub = INVTRY.YRPUB) AND
    > (vwInventory_Dupes.SignedCond = ISNULL(INVTRY.attSignedPD,
    > ' ')) AND (vwInventory_Dupes.Signed = INVTRY.attSigned) AND
    > (vwInventory_Dupes.FirstEd = INVTRY.attFirstEdition) AND
    > (vwInventory_Dupes.Author = INVTRY.AUTHILL1) AND
    > (vwInventory_Dupes.TITLE = INVTRY.TITLE)
    > WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    > = 1))
    > SQL for vwInventory_Dupes, used as subquery:
    > SELECT INVTRY.TITLE, INVTRY.AUTHILL1 Author,
    > Cast(attFirstEdition AS tinyint) FirstEd,
    > Cast(attSigned AS tinyint) Signed,
    > ISNULL(INVTRY.attSignedPD, ' ') SignedCond,
    > INVTRY.YRPUB YearPub
    > FROM WebStatus INNER JOIN
    > (INVTRY INNER JOIN
    > tabStatus ON INVTRY.Status = tabStatus.Status) ON
    > WebStatus.WebStatus = INVTRY.Web
    > WHERE (((tabStatus.ForWeb) = 1) AND ((WebStatus.IncludeDupe)
    > = 1))
    > GROUP BY INVTRY.TITLE, INVTRY.AUTHILL1,
    > Cast(attFirstEdition AS tinyint), Cast(attSigned AS tinyint),
    > ISNULL(INVTRY.attSignedPD, ' '), INVTRY.YRPUB
    > HAVING (((COUNT(INVTRY.[INDEX])) > 1))
    >|||The view in question only returns 1154 rows. So we're not talking a large
    number here. And only returning 24 fields.
    There was a modification recently where three additional fields were added
    to the view, and that seemed to slow things down significantly. I'm not sure
    if there's some boundary at around 24 fields, or if something else is going
    on. But the linked view is *very* slow, taking several seconds just to bring
    up the first screen, and then, whenever the scroll bar goes down by one,
    several more seconds just to refresh. The ADP view, on the other hand, is
    fast, with no delay at all, either in bringing up the data or in scrolling.
    Neil
    "Steve Jorgensen" <nospam@.nospam.nospam> wrote in message
    news:kq9r31tdjl3tv8v10kourkov1psurko5ug@.
    4ax.com...
    > The ways ADPs and MDBs use recordsets are very different, so sometimes one
    > or
    > the other will be faster.
    > By default, the MDB opens a Dynaset which means it first opens a
    > connection to
    > grab the list of keys for the records, then reads the actual records as
    > needed
    > for display by doing individual selects of 10 records aby explicit key.
    > This
    > can help speed when each row has a lot of data because only the rows that
    > are
    > actually viewd will be read, not all of them. On the other hand, if the
    > table
    > has a very large number of rows, Access will spend a lot of time in the
    > background reading the whole list of keys, and if the key lookup for each
    > row
    > is slow for some reason, everything will be sluggish.
    > An ADP, a static recordset is normally used, and an absolute cap of 10,000
    > rows is applied, so if your recordset has more than that, you just won't
    > get
    > all the rows. Static means in loads all the data at once, then you browse
    > through it in memeory. That's very fast once you load the data, but if
    > each
    > row has a lot of data, especially memo fields and such, it can take a long
    > time to initially load.
    > On Sun, 20 Mar 2005 08:31:48 GMT, "Neil" <njones@.pxdy.com> wrote:
    >
    >|||> You may try to add a virtual index on your linked view:
    > http://support.microsoft.com/kb/q209123/
    Yes, these are added when you first attach the view or table. When the
    object doesn't have a primary key (as with views) Access prompts you for
    which field(s) to use as pk. It then stores that information. You can't
    update the data otherwise. So it's already there.

    > If this doesn't help, then you will have to use an unbound form coupled
    > with SQL pass-through queries (or ADO objects) to resolve your speed
    > problem with MDB.
    As noted, the reason for not using pass-through is because it needs to be
    updatable.

    >Another solution could be to go with TS to simulate a high-speed LAN.
    What is "TS"?

    > I don't know where you got the impression that MDB were about the same as
    > ADP in term of speed. It has been repeated a number of times that the use
    > of MDB' linked tables and views is only a workable solution for small
    > databases on a fast Lan.
    From discussions in this newsgroup.
    Neil

    > S. L.
    > "Neil" <njones@.pxdy.com> wrote in message
    > news:Uxa%d.15606$cN6.15135@.newsread1.news.pas.earthlink.net...
    >|||TS = Terminal Server; you can also use Citrix. This is a quick fix for
    getting a multi-user access to an Access' MDB file over the Internet or to
    solve the possibility of corruption when you LAN network is not rock solid.
    However, this solution come with a price ($).
    With the use of unbound forms as the solution, you are responsible for
    sending the modifications to the data back to the database. This will give
    you the possibility to use the result of a read-only SQL pass-through in a
    form but, obviously, with the obligation of having more coding work to be
    done. Of course, some of this work can be partially automated. You will
    find more information on that subject on books dealing with Access and
    SQL-Server. (Personally, I prefer to use ADP but it has many bugs.)
    By using the profiler on the SQL-Server, it is also possible that you will
    see something that will give you the possibility of resolving the speed
    problem of you linked views by having a better understanding of what Access
    is doing when it communicates with the server.
    S. L.
    "Neil" <njones@.pxdy.com> wrote in message
    news:FCk%d.633$H06.566@.newsread3.news.pas.earthlink.net...
    > Yes, these are added when you first attach the view or table. When the
    > object doesn't have a primary key (as with views) Access prompts you for
    > which field(s) to use as pk. It then stores that information. You can't
    > update the data otherwise. So it's already there.
    >
    > As noted, the reason for not using pass-through is because it needs to be
    > updatable.
    >
    > What is "TS"?
    >
    > From discussions in this newsgroup.
    > Neil
    >
    >|||Are you talking about the WAN or a LAN?
    In the case of the WAN, all tests that I have done in the past indicate that
    MDB files are much slower to access a SQL-Server backend. The use of linked
    views will greatly reduce the performance hit but even with them, I don't
    see the benefice of creating hundred of views instead of creating hundred of
    stored procedures. If you want to get some decent speed over the internet,
    there are a lot more of work to do using MDB than using ADP and even then,
    I'm not really sure if the use of linked views will achieve the same level
    of performance.
    You are entitled to your opinion but all the tests that I have done in the
    past clearly indicate that the use of MDB to access a SQL-Server over the
    internet is only, at its best, a kludge.
    For a LAN, the problem is of course much less severe but at the condition
    that the network is not already overcrowded.
    S. L.
    "Steve Jorgensen" <nospam@.nospam.nospam> wrote in message
    news:vvgr31l3buv11blqbv3utfk22uhgoa3vab@.
    4ax.com...
    > On Sun, 20 Mar 2005 12:32:10 -0500, "Sylvain Lafontaine" <sylvain aei ca
    > (fill
    > the blanks, no spam please)> wrote:
    >
    > Frankly, I find that statement ludicrous. Many developers including
    > myself
    > have had excelent results using MDBs as front-ends to various kinds of SQL
    > Server back-end for many years before there was such a thing as an ADP.
    > When
    > MDBs are slow, the workarounds to fix it are far less arduous than the
    > workarounds required in ADPs to simply make them function in many cases.
    >|||Did you specify a field or set of fields to be used as the primary key for t
    he
    view when you created the link? If not, it will be slower, and will not be
    updateable.
    On Sun, 20 Mar 2005 19:58:33 GMT, "Neil" <njones@.pxdy.com> wrote:

    >The view in question only returns 1154 rows. So we're not talking a large
    >number here. And only returning 24 fields.
    >There was a modification recently where three additional fields were added
    >to the view, and that seemed to slow things down significantly. I'm not sur
    e
    >if there's some boundary at around 24 fields, or if something else is going
    >on. But the linked view is *very* slow, taking several seconds just to brin
    g
    >up the first screen, and then, whenever the scroll bar goes down by one,
    >several more seconds just to refresh. The ADP view, on the other hand, is
    >fast, with no delay at all, either in bringing up the data or in scrolling.
    >Neil
    >
    >"Steve Jorgensen" <nospam@.nospam.nospam> wrote in message
    > news:kq9r31tdjl3tv8v10kourkov1psurko5ug@.
    4ax.com...
    >|||Well, perhaps the reason for our difference of opinion is that I never thoug
    ht
    it was particularly appropriate to connect directly to a database server
    across a WAN at all. I usually recommend using a terminal server or rewriti
    ng
    the app as a Web application or some other kind of 3-tier application.
    On Sun, 20 Mar 2005 16:49:55 -0500, "Sylvain Lafontaine" <sylvain aei ca (fi
    ll
    the blanks, no spam please)> wrote:

    >Are you talking about the WAN or a LAN?
    >In the case of the WAN, all tests that I have done in the past indicate tha
    t
    >MDB files are much slower to access a SQL-Server backend. The use of linke
    d
    >views will greatly reduce the performance hit but even with them, I don't
    >see the benefice of creating hundred of views instead of creating hundred o
    f
    >stored procedures. If you want to get some decent speed over the internet,
    >there are a lot more of work to do using MDB than using ADP and even then,
    >I'm not really sure if the use of linked views will achieve the same level
    >of performance.
    >You are entitled to your opinion but all the tests that I have done in the
    >past clearly indicate that the use of MDB to access a SQL-Server over the
    >internet is only, at its best, a kludge.
    >For a LAN, the problem is of course much less severe but at the condition
    >that the network is not already overcrowded.
    >S. L.
    >"Steve Jorgensen" <nospam@.nospam.nospam> wrote in message
    > news:vvgr31l3buv11blqbv3utfk22uhgoa3vab@.
    4ax.com...
    >|||"Neil" <njones@.pxdy.com> wrote in message
    news:Uxa%d.15606$cN6.15135@.newsread1.news.pas.earthlink.net...
    > In previous discussions about using an MDB file vs. an ADP file as a front
    > end for SQL Server, the impression I got was that both were about the
    > same, but that the MDB was a more mature technology and less problematic
    > than the ADP technology. However, the speed difference I'm noticing with
    > the ADP file in regards to this view is significant and is very
    > disconcerting re. using an MDB file.
    > Any thoughts/comments/suggestions would be appreciated. I've reproduced
    > the view's SQL below for reference.
    Yes, a few things needs to cleared up here.
    First, using a ADP with sql server is kind of like using a automatic truck
    vs a truck with a standard shift. If you don't know trucks, and how to shift
    gears, then obviously the automatic truck is going to be better. On the
    other hand, an advanced driver will get the same performance out of the
    standard truck...
    If you look at the sql you posted, there is a number of tables involved.
    If you just link a bunch of tables to sql server, and then tell ms-access to
    "join" them together..you will often get poor performance. I mean, obviously
    ms-access/JET has to pull data from multiple tables. With ODBC linked
    tables, each table is *often* thought as a separate data source. With
    a ADP, that sql is processed server side.
    Remember, ms-access/JET has a difficult
    time working with multiple ODBC DATA sources when you do a join on them. The
    reason of course is that one table might be from Oracle, and the other might
    be a local FoxPro table. When you join data through linked tables, you have
    to remem ber what the Robot in Lost in space used to say:
    "Danger ...Will Robison....Danger"...
    When you use a ADP, that whole sql statement is sent to sql server to be
    processed.
    So, of course, if you used a pass-through query, then both the ADP, and the
    ODBC will performance the same.
    However, you mentioned that you can't use a pass through. However, you STILL
    are using a sql statement that have SEVERAL LINKED tables. ms-access is
    going
    to have to figure out those links for you!. This should not be a surprise if
    you think about what is going on here. However, the simple solution here is
    thus to simply create a view on sql server, and then link to that!
    Doing this, you will get the same
    performance again as the ADP.
    So, the lesson here is that you simply have to be MORE conscience of sql
    that joins tables together. You can often get away with at last one extra
    joined table via link tables..but as a general rule, you have to build a
    query
    anyway, so, just built a view on the sql side..and you eliminate the
    performance
    problem.
    So, our question is using a ADP going to be faster then a MDB with linked
    tables?
    answers: Yes, ADP will be faster if you don't pay attention to avoiding
    bottle necks, and thinking about what is going on...
    So, yes, you do need a bit more caution when using a mdb file and odbc
    tables against sql server. Without question, a ADP allows you to be much
    more lazy, as ALL
    SQL is 100% executed on the sql server side, and thus it is MUCH harder to
    screw things up. With a mdb/odbc linked tables, you need extra caution, and
    extra effort to avoid bottle necks. In effect, the increased flexibility of
    a
    mdb/odbc setup means you have more rope and more room to hang yourself!!
    However, with a small effort, and some caution, you can EASLEY get the same
    performance with a mdb/odbc as you get with a
    ADP.
    Albert D. Kallal (Access MVP)
    Edmonton, Alberta Canada
    pleaseNOOSpamKallal@.msn.com
    http://www.members.shaw.ca/AlbertKallal