List:General Discussion« Previous MessageNext Message »
From:Andy Wallace Date:September 5 2012 9:48pm
Subject:Re: Understanding Slow Query Log
View as plain text  
Thanks, Rick - definitely something to think about. I've been
troubled by the pagination stuff in our code. This looks like
something I can definitely use!

andy

On 9/5/12 2:40 PM, Rick James wrote:
> Remember where you "left off".
>
> Your "Next" button now says something like ?page=5&size=50
> When you get there, you are doing something like SELECT ... ORDER BY ... LIMIT 250,
> 50
>
> Instead...
> Make it say ?after_id=12345&size=50
> and then do SELECT ... WHERE id > 12345 ORDER BY ... LIMIT 51
>
> With 51, you get 3 things:
> * the 50 items (or fewer) for the page
> * a clue that there will be a "Next" page
> * the id of the first item for that Next page
>
> 'Exercises for the reader':
> * 'Prev'
> * each of the next 5
> * each of the previous 5
> * go to last page
> * go to first page
> * Knowing whether to have those links or 'gray them out'.
>
> A sample UI layout (you've probably seen web pages like this):
>     GoTo Page [1] ... [13] [14] 15 [16] [17] ... [last]
> Where
> * [] represents a link.
> * You are currently (for this example) on page 15
> * It is showing you only the Next/Prev 2 pages.
>
> I have encountered multiple cases where a "crawler" (eg, search engine) brought a
> site to its knees because of "pagination via OFFSET".
>
> "Pagination via OFFSET" is Order(N) to fetch a page; Order(N*N) to scan the entire
> list.  The first page takes 1 unit of effort. The second takes 2; etc.  By the time the
> entire list has been paged through, about N*N/2 units of work have been done.
>
> My technique is Order(1) for a page, Order(N) for a complete scan.
>
> N is the number of pages.  Some implementations have more than 10,000 pages.  10,000
> * 10,000 = 100 million !
>
>> -----Original Message-----
>> From: Andy Wallace [mailto:awallace@stripped]
>> Sent: Wednesday, September 05, 2012 2:05 PM
>> To: mysql@stripped
>> Subject: Re: Understanding Slow Query Log
>>
>> Ok, this raises a question for me - what's a better way to do
>> pagination?
>>
>> On 9/5/12 2:02 PM, Rick James wrote:
>>> * LIMIT 0, 50 -- are you doing "pagination" via OFFSET?  Bad idea.
>>
>>
>>
>> --
>> Andy Wallace
>> iHOUSEweb, Inc.
>> awallace@stripped
>> (866) 645-7700 ext 219
>> --
>> "Sometimes it pays to stay in bed on Monday, rather than spending the
>> rest of the week debugging Monday's code."
>> - Christopher Thompson
>>
>> --
>> MySQL General Mailing List
>> For list archives: http://lists.mysql.com/mysql
>> To unsubscribe:    http://lists.mysql.com/mysql
>

-- 
Andy Wallace
iHOUSEweb, Inc.
awallace@stripped
(866) 645-7700 ext 219
--
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of the week
debugging Monday's code."
- Christopher Thompson
Thread
Understanding Slow Query LogAdarsh Sharma1 Sep
  • Re: Understanding Slow Query Logyoku ts1 Sep
  • Re: Understanding Slow Query LogSuresh Kuna1 Sep
    • RE: Understanding Slow Query LogRick James4 Sep
      • Re: Understanding Slow Query LogAdarsh Sharma5 Sep
        • Re: Understanding Slow Query LogManuel Arostegui5 Sep
          • Re: Understanding Slow Query LogAdarsh Sharma5 Sep
Re: Understanding Slow Query LogAdarsh Sharma5 Sep
  • RE: Understanding Slow Query LogRick James5 Sep
    • Re: Understanding Slow Query LogAndy Wallace5 Sep
      • RE: Understanding Slow Query LogRick James5 Sep
        • Re: Understanding Slow Query LogAndy Wallace5 Sep