[英]mysql optimize query for paging
請問有人可以幫我確定這個查詢的寬度嗎? 我找不到解決方案。
SELECT *,p.cat_id, cat_name FROM ( SELECT cat_id FROM categories ORDER BY cat_id LIMIT 700000, 10 ) o JOIN categories p ON p.cat_id = o.cat_id ORDER BY p.cat_id
它在具有80萬條記錄的表上非常快,但是我需要的是使用order by子句以及claue -to分頁對數據進行排序。 如果我使用命令非常慢或結果未正確排序>
SELECT *, p.cat_id, cat_name FROM(
SELECT cat_id
FROM categories
LIMIT 700000, 10
) o JOIN categories p
ON p.cat_id = o.cat_id
ORDER BY p.cat_name
page 1
LIMIT 700000,5:
id name
12525525 car
15155151 carpet
1521512i zone
page 2
LIMIT 700005,5
id name
12525525 carefull
15155151 excellent
52151222 drive
我需要結果:
page 1 car
carpet
drive
excellent ... etc.
f.e. , this is very slow ofcourse >
SELECT *, p.cat_id, cat_name
FROM (
SELECT cat_id
FROM categories
**ORDER BY cat_name**
LIMIT 700000, 10
) o
JOIN categories p
ON p.cat_id = o.cat_id
ORDER BY p.cat_name
主鍵cat_id,自動遞增我在表中的字段上有索引
非常感謝您的幫助或一些想法
您不需要JOIN
同一張表,並且必須在內部查詢中執行ORDER BY
才能使用外部查詢中的WHWRE
子句正確排序:
SET @rownum = 0;
SELECT t.*, t.rank as TableRank
FROM
(
SELECT *, (@rownum := @rownum + 1) as rank
FROM categories c
ORDER BY c.cat_name
) t
WHERE rank BETWEEN ((@PageNum - 1) * @PageSize + 1)
AND (@PageNum * @PageSize)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.