I'm looking for general strategies to get the very best possible performance when you need to return only a certain "page's" worth of data AND for searching by name. For example, I want the very best way to possible for a user to search the list by name and only return back the 10 names for the "page" of the result set that they are on AND return the total result count so that I can calculate the total number of pages in the entire result set. I'm open to all ideas. For example, how about creating a supporting table with only the id and first and last names. Maybe I could search through that table instead so as not to affect the performance on the main table that the rest of the site is using. I've got around 2 million rows worth of user data. We've added indexes and done all the tuning that we know how, but I still get timouts occasionally. Let's assume that this table isn't being updated at all while the query is running. Would a normal select statement cause a lock that would prevent others from running the same select statement?