Azure Series: 05 – Database Performance

Database Performance

Gaining acceptable performance with client applications against a remote backend involves somewhat of a paradigm shift compared to how we’re used to developing desktop applications in local client/server environments. This latest post in the Azure Series covers the techniques and practices required to do so.

At 44 printed pages, this document’s a bit too large for a blog post, so you can find the PDF download below.

The Database Performance article is written for desktop developers who are new to working with remote backends and need some guidance on techniques for making the application perform well: a formidable task for the uninitiated.

The PDF can be downloaded here:

[download id=”1402″]


Below is a generalized table of contents that should help describe some of what you will find within the document.

  1. Foreword: why this was written, common concerns, and how we’ll attempt to address the problem.
  2. A Context and a Goal: This describes an example company that we’ll use throughout the article – a service company with some fairly demanding requirements.  We’ll also define the ultimate goal that we’re attempting to achieve in terms of performance.
  3. Getting Grounded: This discusses the basis of concerns when working with remote databases.  Namely the ODBC driver and how it effects performance.  This section also gives us some insight as to how we can recognize certain types of data and handle them accordingly, as there’s different methods that may work better than others depending on what “type” of data we’re working with.
  4. List/Static Data: how to handle data that’s more or less “just there” and isn’t expected to change often.
  5. Primary Data: core recordsets, form binding, basic CRUD operations on non-complex data.
  6. Handling Complex Queries: the real fun… how to efficiently work with highly complex datasets for more sophisticated processes and views.  This section starts by a detailed look at the example company’s schema, defines an example query, discusses passthrough queries in some depth, how to manage updates to complex data and finally some other design considerations for working with “heavy” datasets.
  7. Tips, Tricks and Other Considerations: Here, topics on threading, timers and events, async processing, service queues, remote polling, denormalization, XML/JSON and stored procedure/bind parameters should give us some food for thought.

Feedback is appreciated!


Share on:

Share on facebook
Share on twitter
Share on linkedin

Reader Interactions


  1. Philipp says

    Jack, This post is epic!
    I does not only contain a ton of valuable information but it is easy and fun to read too. Well done! You might have left out some of details on the data structures (page 20ff) and the details of the sql queries (around page 30) to trim the texts length a bit without loosing much value.
    Keep up the good work!

  2. Jack D. Leach says

    I considered trimming the final SQL down some, but on the other hand wanted people to be able to see that complex queries don’t necessarily mean slow queries either, so I opted to leave it in. Thanks for the comment! I’m not sure about epic, but it was fun to write and – as far as I know – is now the only place to find this specific information, so hopefully it will serve well. Cheers, -jack

Leave a Reply

Your email address will not be published. Required fields are marked *

For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

I agree to these terms.

Recent articles