Dynamic Data Store Tips: Don’t use Find when you know an object’s “Id”

  • Number of votes: 2
  • Views: 3319
  • Average rating:

Syndication and Sharing

I have seen a few examples of code where an object is to be read from the Dynamic Data Store. The calling code has the objects “Id” value but use the Find method of DynamicDataStore to load the object.

Find works by generating a simple where clause against the store’s database view. The problem here is that the “Id” column in a store’s view is a non indexed manufactured string value based on the underlying StoreId (int) and ExternalId (Guid). Searching against this will be slow when dealing with a large number of rows.

If you know the “Id” of an item you should ALWAYS use the Load method of the DynamicDataStore. Load searches directly against either the StoreId or ExternalId columns, both of which are indexed.

See my previous blog entry Best (and fastest) ways to load items from the Dynamic Data Store for more details of loading.

Happy loading!

Comments

  • (By Paul Smith , 31 January 2011 10:10, Permanent link)

    Side note: Passing "Id" to Find will throw an exception from EPiServer vNext (CMS 7 probably)

  • (By Anders Hattestad , 31 January 2011 10:55, Permanent link)

    But if I want to query on the int or guid part of the ID, is that ok?
    or will you throw an exteption on that also

    as in this post
    http://world.episerver.com/Blogs/Anders-Hattestad/Dates/2011/1/PageProviders-and-DDS-a-match-from-heaven/

  • (By Jonas Bergqvist , 31 January 2011 11:26, Permanent link)

    Yes, it will still be possible to query with LINQ against ID