我正在努力加快我的網站上的數據分頁。我想用下面的查詢,但是當我做一個解釋說,它需要掃描超過40,000行:用MySQL高效分頁
SELECT `Item`.`id`, `User`.`id`
FROM `items` AS `Item`
LEFT JOIN `users` AS `User`
ON (`Item`.`submitter_id` = `User`.`id`)
WHERE `Item`.`made_popular` < "2010-02-08 22:05:05"
AND `Item`.`removed` != 1
ORDER BY `Item`.`made_popular` DESC
LIMIT 26
但是,如果我添加一個下界「made_popular」字段只需要掃描99行(這兩個日期之間的項目數量)。
SELECT `Item`.`id`, `User`.`id`
FROM `items` AS `Item`
LEFT JOIN `users` AS `User`
ON (`Item`.`submitter_id` = `User`.`id`)
WHERE `Item`.`made_popular` < "2010-02-08 22:05:05"
AND `Item`.`made_popular` > "2010-02-07 22:05:05"
AND `Item`.`removed` != 1
ORDER BY `Item`.`made_popular` DESC
LIMIT 26
這兩個查詢都使用我在「made_popular」列上的索引。 在這兩種情況下,不應該只需要掃描26行,假設沒有「刪除」項目?我想解決方案可能是去與第二個查詢,並添加一個下限可能低到給我26項,但似乎很奇怪,我應該不得不做一個這樣的解決方法。
LIMIT N,M允許您設置偏移量(N)和返回結果的數量(M)。 LIMIT 1,26是否可以提高性能? – 2011-02-09 03:32:52